NIFI-4764: Add tooltips to status bar icons

add tooltip to process groups
cleanup
This closes #2394
This commit is contained in:
Marco Gaido 2018-01-10 17:00:55 +01:00 committed by Matt Gilman
parent bcac2766bc
commit 39a484b631
No known key found for this signature in database
GPG Key ID: DF61EC19432AEE37
3 changed files with 69 additions and 29 deletions

View File

@ -149,7 +149,13 @@ image::nifi-toolbar-components.png["NiFi Components Toolbar"]
The Components Toolbar runs across the top left portion of your screen. It consists of the components you can drag onto the The Components Toolbar runs across the top left portion of your screen. It consists of the components you can drag onto the
canvas to build your dataflow. Each component is described in more detail in link:building-dataflow.html[Building a Dataflow]. canvas to build your dataflow. Each component is described in more detail in link:building-dataflow.html[Building a Dataflow].
The Status Bar is under the Components Toolbar. The Status bar provides information about the number of threads that are currently active in the flow, the amount of data that currently exists in the flow, how many Remote Process Groups exist on the canvas in each state (Transmitting, Not Transmitting), how many Processors exist on the canvas in each state (Stopped, Running, Invalid, Disabled), how many versioned Process Groups exist on the canvas in each state (Up to date, Locally modified, Stale, Locally modified and stale, Sync failure) and the timestamp at which all of this information was last refreshed. Additionally, if the instance of NiFi is clustered, the Status bar shows how many nodes are in the cluster and how many are currently connected. The Status Bar is under the Components Toolbar. The Status bar provides information about the number of threads that are
currently active in the flow, the amount of data that currently exists in the flow, how many Remote Process Groups exist
on the canvas in each state (Transmitting, Not Transmitting), how many Processors exist on the canvas in each state
(Stopped, Running, Invalid, Disabled), how many versioned Process Groups exist on the canvas in each state (Up to date,
Locally modified, Stale, Locally modified and stale, Sync failure) and the timestamp at which all of this information
was last refreshed. Additionally, if the instance of NiFi is clustered, the Status bar shows how many nodes are in the
cluster and how many are currently connected.
The Operate Palette sits to the left-hand side of the screen. It consists of buttons that are The Operate Palette sits to the left-hand side of the screen. It consists of buttons that are
used by DFMs to manage the flow, as well as by administrators who manage user access used by DFMs to manage the flow, as well as by administrators who manage user access

View File

@ -17,23 +17,23 @@
<%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %> <%@ page contentType="text/html" pageEncoding="UTF-8" session="false" %>
<div id="flow-status" flex layout="row" layout-align="space-between center"> <div id="flow-status" flex layout="row" layout-align="space-between center">
<div id="flow-status-container" layout="row" layout-align="space-around center"> <div id="flow-status-container" layout="row" layout-align="space-around center">
<div class="fa fa-cubes" ng-if="appCtrl.nf.ClusterSummary.isClustered()"><span id="connected-nodes-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.connectedNodesCount}}</span></div> <div class="fa fa-cubes" ng-if="appCtrl.nf.ClusterSummary.isClustered()" title="Connected nodes / Total number of nodes in the cluster"><span id="connected-nodes-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.connectedNodesCount}}</span></div>
<div class="icon icon-threads"><span id="active-thread-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.activeThreadCount}}</span></div> <div class="icon icon-threads" title="Active threads"><span id="active-thread-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.activeThreadCount}}</span></div>
<div class="fa fa-list"><span id="total-queued">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.totalQueued}}</span></div> <div class="fa fa-list" title="Total queued data"><span id="total-queued">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.totalQueued}}</span></div>
<div class="fa fa-bullseye"><span id="controller-transmitting-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerTransmittingCount}}</span></div> <div class="fa fa-bullseye" title="Transmitting Remote Process Groups"><span id="controller-transmitting-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerTransmittingCount}}</span></div>
<div class="icon icon-transmit-false"><span id="controller-not-transmitting-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerNotTransmittingCount}}</span></div> <div class="icon icon-transmit-false" title="Not Transmitting Remote Process Groups"><span id="controller-not-transmitting-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerNotTransmittingCount}}</span></div>
<div class="fa fa-play"><span id="controller-running-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerRunningCount}}</span></div> <div class="fa fa-play" title="Running Components"><span id="controller-running-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerRunningCount}}</span></div>
<div class="fa fa-stop"><span id="controller-stopped-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerStoppedCount}}</span></div> <div class="fa fa-stop" title="Stopped Components"><span id="controller-stopped-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerStoppedCount}}</span></div>
<div class="fa fa-warning"><span id="controller-invalid-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerInvalidCount}}</span></div> <div class="fa fa-warning" title="Invalid Components"><span id="controller-invalid-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerInvalidCount}}</span></div>
<div class="icon icon-enable-false"><span id="controller-disabled-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerDisabledCount}}</span></div> <div class="icon icon-enable-false" title="Disabled Components"><span id="controller-disabled-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerDisabledCount}}</span></div>
<div class="fa fa-check"><span id="controller-up-to-date-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerUpToDateCount}}</span></div> <div class="fa fa-check" title="Up to date Versioned Process Groups"><span id="controller-up-to-date-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerUpToDateCount}}</span></div>
<div class="fa fa-asterisk"><span id="controller-locally-modified-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerLocallyModifiedCount}}</span></div> <div class="fa fa-asterisk" title="Locally modified Versioned Process Groups"><span id="controller-locally-modified-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerLocallyModifiedCount}}</span></div>
<div class="fa fa-arrow-circle-up"><span id="controller-stale-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerStaleCount}}</span></div> <div class="fa fa-arrow-circle-up" title="Stale Versioned Process Groups"><span id="controller-stale-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerStaleCount}}</span></div>
<div class="fa fa-exclamation-circle"> <div class="fa fa-exclamation-circle" title="Locally modified and stale Versioned Process Groups">
<span id="controller-locally-modified-and-stale-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerLocallyModifiedAndStaleCount}}</span> <span id="controller-locally-modified-and-stale-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerLocallyModifiedAndStaleCount}}</span>
</div> </div>
<div class="fa fa-question"><span id="controller-sync-failure-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerSyncFailureCount}}</span></div> <div class="fa fa-question" title="Sync failure Versioned Process Groups"><span id="controller-sync-failure-count">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.controllerSyncFailureCount}}</span></div>
<div class="fa fa-refresh"><span id="stats-last-refreshed">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.statsLastRefreshed}}</span></div> <div class="fa fa-refresh" title="Last refresh"><span id="stats-last-refreshed">{{appCtrl.serviceProvider.headerCtrl.flowStatusCtrl.statsLastRefreshed}}</span></div>
<div id="canvas-loading-container" class="loading-container"></div> <div id="canvas-loading-container" class="loading-container"></div>
</div> </div>
<div layout="row" layout-align="end center"> <div layout="row" layout-align="end center">

View File

@ -308,7 +308,10 @@
'class': 'process-group-transmitting process-group-contents-icon', 'class': 'process-group-transmitting process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf140'); .text('\uf140')
.append("title")
.text("Transmitting Remote Process Groups");
// transmitting count // transmitting count
details.append('text') details.append('text')
@ -324,7 +327,9 @@
'class': 'process-group-not-transmitting process-group-contents-icon', 'class': 'process-group-not-transmitting process-group-contents-icon',
'font-family': 'flowfont' 'font-family': 'flowfont'
}) })
.text('\ue80a'); .text('\ue80a')
.append("title")
.text("Not Transmitting Remote Process Groups");
// not transmitting count // not transmitting count
details.append('text') details.append('text')
@ -340,7 +345,9 @@
'class': 'process-group-running process-group-contents-icon', 'class': 'process-group-running process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf04b'); .text('\uf04b')
.append("title")
.text("Running Components");
// running count // running count
details.append('text') details.append('text')
@ -356,7 +363,9 @@
'class': 'process-group-stopped process-group-contents-icon', 'class': 'process-group-stopped process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf04d'); .text('\uf04d')
.append("title")
.text("Stopped Components");
// stopped count // stopped count
details.append('text') details.append('text')
@ -372,7 +381,9 @@
'class': 'process-group-invalid process-group-contents-icon', 'class': 'process-group-invalid process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf071'); .text('\uf071')
.append("title")
.text("Invalid Components");
// invalid count // invalid count
details.append('text') details.append('text')
@ -388,7 +399,9 @@
'class': 'process-group-disabled process-group-contents-icon', 'class': 'process-group-disabled process-group-contents-icon',
'font-family': 'flowfont' 'font-family': 'flowfont'
}) })
.text('\ue802'); .text('\ue802')
.append("title")
.text("Disabled Components");
// disabled count // disabled count
details.append('text') details.append('text')
@ -407,7 +420,9 @@
'class': 'process-group-up-to-date process-group-contents-icon', 'class': 'process-group-up-to-date process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf00c'); .text('\uf00c')
.append("title")
.text("Up to date Versioned Process Groups");
// up to date count // up to date count
details.append('text') details.append('text')
@ -427,7 +442,9 @@
'class': 'process-group-locally-modified process-group-contents-icon', 'class': 'process-group-locally-modified process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf069'); .text('\uf069')
.append("title")
.text("Locally modified Versioned Process Groups");
// locally modified count // locally modified count
details.append('text') details.append('text')
@ -447,7 +464,9 @@
'class': 'process-group-stale process-group-contents-icon', 'class': 'process-group-stale process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf0aa'); .text('\uf0aa')
.append("title")
.text("Stale Versioned Process Groups");
// stale count // stale count
details.append('text') details.append('text')
@ -467,7 +486,9 @@
'class': 'process-group-locally-modified-and-stale process-group-contents-icon', 'class': 'process-group-locally-modified-and-stale process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf06a'); .text('\uf06a')
.append("title")
.text("Locally modified and stale Versioned Process Groups");
// locally modified and stale count // locally modified and stale count
details.append('text') details.append('text')
@ -487,7 +508,9 @@
'class': 'process-group-sync-failure process-group-contents-icon', 'class': 'process-group-sync-failure process-group-contents-icon',
'font-family': 'FontAwesome' 'font-family': 'FontAwesome'
}) })
.text('\uf128'); .text('\uf128')
.append("title")
.text("Sync failure Versioned Process Groups");
// sync failure count // sync failure count
details.append('text') details.append('text')
@ -847,6 +870,7 @@
.text(function (d) { .text(function (d) {
return d.activeRemotePortCount; return d.activeRemotePortCount;
}); });
transmittingCount.append("title").text("Transmitting Remote Process Groups");
// update not transmitting // update not transmitting
var notTransmitting = details.select('text.process-group-not-transmitting') var notTransmitting = details.select('text.process-group-not-transmitting')
@ -868,6 +892,7 @@
.text(function (d) { .text(function (d) {
return d.inactiveRemotePortCount; return d.inactiveRemotePortCount;
}); });
notTransmittingCount.append("title").text("Not transmitting Remote Process Groups")
// update running // update running
var running = details.select('text.process-group-running') var running = details.select('text.process-group-running')
@ -889,6 +914,7 @@
.text(function (d) { .text(function (d) {
return d.runningCount; return d.runningCount;
}); });
runningCount.append("title").text("Running Components");
// update stopped // update stopped
var stopped = details.select('text.process-group-stopped') var stopped = details.select('text.process-group-stopped')
@ -910,6 +936,7 @@
.text(function (d) { .text(function (d) {
return d.stoppedCount; return d.stoppedCount;
}); });
stoppedCount.append("title").text("Stopped Components");
// update invalid // update invalid
var invalid = details.select('text.process-group-invalid') var invalid = details.select('text.process-group-invalid')
@ -931,6 +958,7 @@
.text(function (d) { .text(function (d) {
return d.invalidCount; return d.invalidCount;
}); });
invalidCount.append("title").text("Invalid Components");
// update disabled // update disabled
var disabled = details.select('text.process-group-disabled') var disabled = details.select('text.process-group-disabled')
@ -944,7 +972,7 @@
var invalidX = parseInt(invalidCount.attr('x'), 10); var invalidX = parseInt(invalidCount.attr('x'), 10);
return invalidX + Math.round(invalidCount.node().getComputedTextLength()) + CONTENTS_SPACER; return invalidX + Math.round(invalidCount.node().getComputedTextLength()) + CONTENTS_SPACER;
}); });
details.select('text.process-group-disabled-count') var disabledCount = details.select('text.process-group-disabled-count')
.attr('x', function () { .attr('x', function () {
var disabledCountX = parseInt(disabled.attr('x'), 10); var disabledCountX = parseInt(disabled.attr('x'), 10);
return disabledCountX + Math.round(disabled.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER; return disabledCountX + Math.round(disabled.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
@ -952,6 +980,7 @@
.text(function (d) { .text(function (d) {
return d.disabledCount; return d.disabledCount;
}); });
disabledCount.append("title").text("Disabled Components");
// up to date current // up to date current
var upToDate = details.select('text.process-group-up-to-date') var upToDate = details.select('text.process-group-up-to-date')
@ -969,6 +998,7 @@
.text(function (d) { .text(function (d) {
return d.upToDateCount; return d.upToDateCount;
}); });
upToDateCount.append("title").text("Up to date Versioned Process Groups");
// update locally modified // update locally modified
var locallyModified = details.select('text.process-group-locally-modified') var locallyModified = details.select('text.process-group-locally-modified')
@ -990,6 +1020,7 @@
.text(function (d) { .text(function (d) {
return d.locallyModifiedCount; return d.locallyModifiedCount;
}); });
locallyModifiedCount.append("title").text("Locally modified Versioned Process Groups");
// update stale // update stale
var stale = details.select('text.process-group-stale') var stale = details.select('text.process-group-stale')
@ -1011,6 +1042,7 @@
.text(function (d) { .text(function (d) {
return d.staleCount; return d.staleCount;
}); });
staleCount.append("title").text("Stale Versioned Process Groups");
// update locally modified and stale // update locally modified and stale
var locallyModifiedAndStale = details.select('text.process-group-locally-modified-and-stale') var locallyModifiedAndStale = details.select('text.process-group-locally-modified-and-stale')
@ -1032,6 +1064,7 @@
.text(function (d) { .text(function (d) {
return d.locallyModifiedAndStaleCount; return d.locallyModifiedAndStaleCount;
}); });
locallyModifiedAndStaleCount.append("title").text("Locally modified and stale Versioned Process Groups");
// update sync failure // update sync failure
var syncFailure = details.select('text.process-group-sync-failure') var syncFailure = details.select('text.process-group-sync-failure')
@ -1045,7 +1078,7 @@
var syncFailureX = parseInt(locallyModifiedAndStaleCount.attr('x'), 10); var syncFailureX = parseInt(locallyModifiedAndStaleCount.attr('x'), 10);
return syncFailureX + Math.round(locallyModifiedAndStaleCount.node().getComputedTextLength()) + CONTENTS_SPACER - 2; return syncFailureX + Math.round(locallyModifiedAndStaleCount.node().getComputedTextLength()) + CONTENTS_SPACER - 2;
}); });
details.select('text.process-group-sync-failure-count') var syncFailureCount = details.select('text.process-group-sync-failure-count')
.attr('x', function () { .attr('x', function () {
var syncFailureCountX = parseInt(syncFailure.attr('x'), 10); var syncFailureCountX = parseInt(syncFailure.attr('x'), 10);
return syncFailureCountX + Math.round(syncFailure.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER; return syncFailureCountX + Math.round(syncFailure.node().getComputedTextLength()) + CONTENTS_VALUE_SPACER;
@ -1053,6 +1086,7 @@
.text(function (d) { .text(function (d) {
return d.syncFailureCount; return d.syncFailureCount;
}); });
syncFailureCount.append("title").text("Sync failure Versioned Process Groups");
// update version control information // update version control information
var versionControl = processGroup.select('text.version-control') var versionControl = processGroup.select('text.version-control')