[ 
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)

Reply via email to