[
https://issues.apache.org/jira/browse/NIFI-2795?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15510782#comment-15510782
]
ASF GitHub Bot commented on NIFI-2795:
--------------------------------------
Github user mcgilman commented on a diff in the pull request:
https://github.com/apache/nifi/pull/1042#discussion_r79894191
--- Diff:
nifi-nar-bundles/nifi-framework-bundle/nifi-framework/nifi-web/nifi-web-ui/src/main/webapp/js/nf/cluster/nf-cluster-table.js
---
@@ -24,13 +24,275 @@ nf.ClusterTable = (function () {
*/
var config = {
primaryNode: 'Primary Node',
- clusterCoorindator: 'Cluster Coordinator',
+ clusterCoordinator: 'Cluster Coordinator',
urls: {
cluster: '../nifi-api/controller/cluster',
- nodes: '../nifi-api/controller/cluster/nodes'
- }
+ nodes: '../nifi-api/controller/cluster/nodes',
+ systemDiagnostics: '../nifi-api/system-diagnostics'
+ },
+ data: [{
+ name: 'cluster',
+ update: refreshClusterData
+ },{
+ name: 'systemDiagnostics',
+ update: refreshSystemDiagnosticsData
+ }
+ ]
};
+ var commonTableOptions = {
+ forceFitColumns: true,
+ enableTextSelectionOnCells: true,
+ enableCellNavigation: false,
+ enableColumnReorder: false,
+ autoEdit: false,
+ rowHeight: 24
+ };
+
+ var nodesTab = {
+ name: 'Nodes',
+ data: {
+ dataSet: 'cluster',
+ update: updateNodesTableData
+ },
+ tabContentId: 'cluster-nodes-tab-content',
+ tableId: 'cluster-nodes-table',
+ tableColumnModel: createNodeTableColumnModel,
+ tableIdColumn: 'nodeId',
+ tableOptions: commonTableOptions,
+ tableOnClick: nodesTableOnClick,
+ init: commonTableInit,
+ onSort: sort,
+ onTabSelected: onSelectTab,
+ filterOptions: [{
+ text: 'by address',
+ value: 'address'
+ }, {
+ text: 'by status',
+ value: 'status'
+ }]
+ };
+
+ var jvmTab = {
+ name: 'JVM',
+ data: {
+ dataSet: 'systemDiagnostics',
+ update: updateJvmTableData
+ },
+ tabContentId: 'cluster-jvm-tab-content',
+ tableId: 'cluster-jvm-table',
+ tableColumnModel: [
+ {id: 'node', field: 'node', name: 'Node Address', sortable:
true, resizable: true},
+ {id: 'heapMax', field: 'maxHeap', name: 'Heap Max', sortable:
true, resizable: true, cssClass: 'cell-right', headerCssClass: 'header-right'},
+ {id: 'heapTotal', field: 'totalHeap', name: 'Heap Total',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'heapUsed', field: 'usedHeap', name: 'Heap Used',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'heapUtilPct', field: 'heapUtilization', name: 'Heap
Utilization', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'},
+ {id: 'nonHeapTotal', field: 'totalNonHeap', name: 'Non-Heap
Total', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'},
+ {id: 'nonHeapUsed', field: 'usedNonHeap', name: 'Non-Heap
Used', sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'gcOldGen', field: 'gcOldGen', name: 'G1 Old Generation',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'gcNewGen', field: 'gcNewGen', name: 'G1 Young
Generation', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'}
+ ],
+ tableIdColumn: 'id',
+ tableOptions: commonTableOptions,
+ tableOnClick: null,
+ init: commonTableInit,
+ onSort: sort,
+ onTabSelected: onSelectTab,
+ filterOptions: [{
+ text: 'by address',
+ value: 'address'
+ }]
+ };
+
+ var systemTab = {
+ name: 'System',
+ data: {
+ dataSet: 'systemDiagnostics',
+ update: updateSystemTableData
+ },
+ tabContentId: 'cluster-system-tab-content',
+ tableId: 'cluster-system-table',
+ tableColumnModel: [
+ {id: 'node', field: 'node', name: 'Node Address', sortable:
true, resizable: true},
+ {id: 'processors', field: 'processors', name: 'Processors',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'processorLoadAverage', field: 'processorLoadAverage',
name: 'Processor Load Average', sortable: true, resizable: true, cssClass:
'cell-right', headerCssClass: 'header-right'},
+ {id: 'totalThreads', field: 'totalThreads', name: 'Total
Threads', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'},
+ {id: 'daemonThreads', field: 'daemonThreads', name: 'Daemon
Threads', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'}
+ ],
+ tableIdColumn: 'id',
+ tableOptions: commonTableOptions,
+ tableOnClick: null,
+ init: commonTableInit,
+ onSort: sort,
+ onTabSelected: onSelectTab,
+ filterOptions: [{
+ text: 'by address',
+ value: 'address'
+ }]
+ };
+
+ var flowFileTab = {
+ name: 'FlowFile Storage',
+ data: {
+ dataSet: 'systemDiagnostics',
+ update: updateFlowFileTableData
+ },
+ tabContentId: 'cluster-flowfile-tab-content',
+ tableId: 'cluster-flowfile-table',
+ tableColumnModel: [
+ {id: 'node', field: 'node', name: 'Node Address', sortable:
true, resizable: true},
+ {id: 'ffRepoTotal', field: 'ffRepoTotal', name: 'Total Space',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'ffRepoUsed', field: 'ffRepoUsed', name: 'Used Space',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'ffRepoFree', field: 'ffRepoFree', name: 'Free Space',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'},
+ {id: 'ffStoreUtil', field: 'ffRepoUtil', name: 'Utilization',
sortable: true, resizable: true, cssClass: 'cell-right', headerCssClass:
'header-right'}
+ ],
+ tableIdColumn: 'id',
+ tableOptions: commonTableOptions,
+ tableOnClick: null,
+ init: commonTableInit,
+ onSort: sort,
+ onTabSelected: onSelectTab,
+ filterOptions: [{
+ text: 'by address',
+ value: 'address'
+ }]
+ };
+
+ var contentTab = {
+ name: 'Content Storage',
+ data: {
+ dataSet: 'systemDiagnostics',
+ update: updateContentTableData
+ },
+ tabContentId: 'cluster-content-tab-content',
+ tableId: 'cluster-content-table',
+ tableColumnModel: [
+ {id: 'node', field: 'node', name: 'Node Address', sortable:
true, resizable: true},
+ {id: 'contentRepoId', field: 'contentRepoId', name: 'Content
Repository', sortable: true, resizable: true},
+ {id: 'contentRepoTotal', field: 'contentRepoTotal', name:
'Total Space', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'},
+ {id: 'contentRepoUsed', field: 'contentRepoUsed', name: 'Used
Space', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'},
+ {id: 'contentRepoFree', field: 'contentRepoFree', name: 'Free
Space', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'},
+ {id: 'contentRepoUtil', field: 'contentRepoUtil', name:
'Utilization', sortable: true, resizable: true, cssClass: 'cell-right',
headerCssClass: 'header-right'}
+ ],
+ tableIdColumn: 'id',
+ tableOptions: commonTableOptions,
+ tableOnClick: null,
+ init: commonTableInit,
+ onSort: sort,
+ onTabSelected: onSelectTab,
+ filterOptions: [{
+ text: 'by address',
+ value: 'address'
+ }, {
+ text: 'by repository',
+ value: 'contentRepoId'
+ }]
+ };
+
+ var clusterTabs = [nodesTab, systemTab, jvmTab, flowFileTab,
contentTab];
--- End diff --
Does it make sense to conditionally add some tabs when the user does not
have access to them? Specifically, retrieving system diagnostics requires
explicit access. We can add this to the CurrentUserEntity to know when the user
has permissions to this (similar to the checks for
canAccessController/canModifyController).
> Enhance Cluster UI with System Diagnostics
> ------------------------------------------
>
> Key: NIFI-2795
> URL: https://issues.apache.org/jira/browse/NIFI-2795
> Project: Apache NiFi
> Issue Type: New Feature
> Components: Core UI
> Affects Versions: 1.0.0
> Reporter: James Wing
> Assignee: James Wing
> Priority: Minor
> Attachments: cluster-01-nodes.png, cluster-02-system.png,
> cluster-03-jvm.png, cluster-04-flowfile-store.png,
> cluster-05-content-store.png
>
>
> The Cluster UI currently provides some basic information on each node in the
> cluster and options for connecting and disconnecting nodes. I propose to add
> system diagnostics information in tables, contained in multiple tabs.
> Roughly, the tabs should cover the same content as the System Diagnostics
> dialog already in the System UI, but in a tabular format for comparing across
> nodes.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)