This is an automated email from the ASF dual-hosted git repository.

rohit pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/cloudstack-primate.git

commit cf243e83a4a2724230bb7cc4c9be05fc87747554
Author: Rohit Yadav <[email protected]>
AuthorDate: Sun Jun 21 11:42:24 2020 +0530

    config: implement togglable metrics view
    
    Metrics view switch for vm, volume, zone, cluster, host and storagepool
    
    Signed-off-by: Rohit Yadav <[email protected]>
---
 src/config/section/compute.js               | 10 ++++++++--
 src/config/section/infra/clusters.js        | 13 ++++++++++++-
 src/config/section/infra/hosts.js           | 13 ++++++++++++-
 src/config/section/infra/primaryStorages.js | 13 ++++++++++++-
 src/config/section/infra/zones.js           | 12 +++++++++++-
 src/config/section/storage.js               | 16 +++++++++++++++-
 src/store/getters.js                        |  1 +
 src/store/modules/app.js                    |  9 ++++++++-
 src/views/AutogenView.vue                   | 12 +++++++++++-
 9 files changed, 90 insertions(+), 9 deletions(-)

diff --git a/src/config/section/compute.js b/src/config/section/compute.js
index 4b06a42..44e49ee 100644
--- a/src/config/section/compute.js
+++ b/src/config/section/compute.js
@@ -32,8 +32,8 @@ export default {
       resourceType: 'UserVm',
       filters: ['self', 'running', 'stopped'],
       columns: () => {
-        const fields = [
-          'name', 'state', 'ipaddress', 'cpunumber', 'cpuused', 'cputotal',
+        const fields = ['name', 'state', 'ipaddress']
+        const metricsFields = ['cpunumber', 'cpuused', 'cputotal',
           {
             memoryused: (record) => {
               return record.memorykbs && record.memoryintfreekbs ? 
parseFloat(100.0 * (record.memorykbs - record.memoryintfreekbs) / 
record.memorykbs).toFixed(2) + '%' : '0.0%'
@@ -42,15 +42,21 @@ export default {
           'memorytotal', 'networkread', 'networkwrite', 'diskkbsread', 
'diskkbswrite', 'diskiopstotal'
         ]
 
+        if (store.getters.metrics) {
+          fields.push(...metricsFields)
+        }
+
         if (store.getters.userInfo.roletype === 'Admin') {
           fields.splice(2, 0, 'instancename')
           fields.push('account')
           fields.push('hostname')
           fields.push('zonename')
         } else if (store.getters.userInfo.roletype === 'DomainAdmin') {
+          fields.splice(2, 0, 'displayname')
           fields.push('account')
           fields.push('zonename')
         } else {
+          fields.splice(2, 0, 'displayname')
           fields.push('zonename')
         }
         return fields
diff --git a/src/config/section/infra/clusters.js 
b/src/config/section/infra/clusters.js
index c8b06c5..2b6976c 100644
--- a/src/config/section/infra/clusters.js
+++ b/src/config/section/infra/clusters.js
@@ -15,12 +15,23 @@
 // specific language governing permissions and limitations
 // under the License.
 
+import store from '@/store'
+
 export default {
   name: 'cluster',
   title: 'label.clusters',
   icon: 'cluster',
   permission: ['listClustersMetrics'],
-  columns: ['name', 'state', 'allocationstate', 'clustertype', 
'hypervisortype', 'hosts', 'cpuused', 'cpumaxdeviation', 'cpuallocated', 
'cputotal', 'memoryused', 'memorymaxdeviation', 'memoryallocated', 
'memorytotal', 'podname', 'zonename'],
+  columns: () => {
+    const fields = ['name', 'state', 'allocationstate', 'clustertype', 
'hypervisortype', 'hosts']
+    const metricsFields = ['cpuused', 'cpumaxdeviation', 'cpuallocated', 
'cputotal', 'memoryused', 'memorymaxdeviation', 'memoryallocated', 
'memorytotal']
+    if (store.getters.metrics) {
+      fields.push(...metricsFields)
+    }
+    fields.push('podname')
+    fields.push('zonename')
+    return fields
+  },
   details: ['name', 'id', 'allocationstate', 'clustertype', 'hypervisortype', 
'podname', 'zonename'],
   related: [{
     name: 'host',
diff --git a/src/config/section/infra/hosts.js 
b/src/config/section/infra/hosts.js
index 8132825..81264d1 100644
--- a/src/config/section/infra/hosts.js
+++ b/src/config/section/infra/hosts.js
@@ -15,6 +15,8 @@
 // specific language governing permissions and limitations
 // under the License.
 
+import store from '@/store'
+
 export default {
   name: 'host',
   title: 'label.hosts',
@@ -22,7 +24,16 @@ export default {
   permission: ['listHostsMetrics'],
   resourceType: 'Host',
   params: { type: 'routing' },
-  columns: ['name', 'state', 'resourcestate', 'powerstate', 'ipaddress', 
'hypervisor', 'instances', 'cpunumber', 'cputotalghz', 'cpuusedghz', 
'cpuallocatedghz', 'memorytotalgb', 'memoryusedgb', 'memoryallocatedgb', 
'networkread', 'networkwrite', 'clustername', 'zonename'],
+  columns: () => {
+    const fields = ['name', 'state', 'resourcestate', 'ipaddress', 
'hypervisor', 'instances', 'powerstate']
+    const metricsFields = ['cpunumber', 'cputotalghz', 'cpuusedghz', 
'cpuallocatedghz', 'memorytotalgb', 'memoryusedgb', 'memoryallocatedgb', 
'networkread', 'networkwrite']
+    if (store.getters.metrics) {
+      fields.push(...metricsFields)
+    }
+    fields.push('clustername')
+    fields.push('zonename')
+    return fields
+  },
   details: ['name', 'id', 'resourcestate', 'ipaddress', 'hypervisor', 'type', 
'clustername', 'podname', 'zonename', 'disconnected', 'created'],
   tabs: [{
     name: 'details',
diff --git a/src/config/section/infra/primaryStorages.js 
b/src/config/section/infra/primaryStorages.js
index 28ae6c4..0d5bd4f 100644
--- a/src/config/section/infra/primaryStorages.js
+++ b/src/config/section/infra/primaryStorages.js
@@ -15,12 +15,23 @@
 // specific language governing permissions and limitations
 // under the License.
 
+import store from '@/store'
+
 export default {
   name: 'storagepool',
   title: 'label.primary.storage',
   icon: 'database',
   permission: ['listStoragePoolsMetrics'],
-  columns: ['name', 'state', 'ipaddress', 'type', 'path', 'scope', 
'disksizeusedgb', 'disksizetotalgb', 'disksizeallocatedgb', 
'disksizeunallocatedgb', 'clustername', 'zonename'],
+  columns: () => {
+    const fields = ['name', 'state', 'ipaddress', 'scope', 'type', 'path']
+    const metricsFields = ['disksizeusedgb', 'disksizetotalgb', 
'disksizeallocatedgb', 'disksizeunallocatedgb']
+    if (store.getters.metrics) {
+      fields.push(...metricsFields)
+    }
+    fields.push('clustername')
+    fields.push('zonename')
+    return fields
+  },
   details: ['name', 'id', 'ipaddress', 'type', 'scope', 'tags', 'path', 
'provider', 'hypervisor', 'overprovisionfactor', 'disksizetotal', 
'disksizeallocated', 'disksizeused', 'clustername', 'podname', 'zonename', 
'created'],
   related: [{
     name: 'volume',
diff --git a/src/config/section/infra/zones.js 
b/src/config/section/infra/zones.js
index 03f128f..7e8bac9 100644
--- a/src/config/section/infra/zones.js
+++ b/src/config/section/infra/zones.js
@@ -15,12 +15,22 @@
 // specific language governing permissions and limitations
 // under the License.
 
+import store from '@/store'
+
 export default {
   name: 'zone',
   title: 'label.zones',
   icon: 'global',
   permission: ['listZonesMetrics'],
-  columns: ['name', 'state', 'allocationstate', 'networktype', 'clusters', 
'cpuused', 'cpumaxdeviation', 'cpuallocated', 'cputotal', 'memoryused', 
'memorymaxdeviation', 'memoryallocated', 'memorytotal', 'order'],
+  columns: () => {
+    const fields = ['name', 'state', 'allocationstate', 'networktype', 
'clusters']
+    const metricsFields = ['cpuused', 'cpumaxdeviation', 'cpuallocated', 
'cputotal', 'memoryused', 'memorymaxdeviation', 'memoryallocated', 
'memorytotal']
+    if (store.getters.metrics) {
+      fields.push(...metricsFields)
+    }
+    fields.push('order')
+    return fields
+  },
   details: ['name', 'id', 'allocationstate', 'networktype', 
'guestcidraddress', 'localstorageenabled', 'securitygroupsenabled', 'dns1', 
'dns2', 'internaldns1', 'internaldns2'],
   related: [{
     name: 'pod',
diff --git a/src/config/section/storage.js b/src/config/section/storage.js
index 775097c..6a406e2 100644
--- a/src/config/section/storage.js
+++ b/src/config/section/storage.js
@@ -29,7 +29,21 @@ export default {
       permission: ['listVolumesMetrics'],
       resourceType: 'Volume',
       columns: () => {
-        const fields = ['name', 'state', 'type', 'sizegb', 'vmname', 
'diskkbsread', 'diskkbswrite', 'diskiopstotal']
+        const fields = ['name', 'state', 'type', 'vmname', 'sizegb']
+        const metricsFields = ['diskkbsread', 'diskkbswrite', 'diskiopstotal']
+
+        if (store.getters.userInfo.roletype === 'Admin') {
+          metricsFields.push({
+            physicalsize: (record) => {
+              return record.physicalsize ? parseFloat(record.physicalsize / 
(1024.0 * 1024.0 * 1024.0)).toFixed(2) + 'GB' : ''
+            }
+          })
+          metricsFields.push('utilization')
+        }
+
+        if (store.getters.metrics) {
+          fields.push(...metricsFields)
+        }
 
         if (store.getters.userInfo.roletype === 'Admin') {
           fields.push('account')
diff --git a/src/store/getters.js b/src/store/getters.js
index 97103b4..aad4a88 100644
--- a/src/store/getters.js
+++ b/src/store/getters.js
@@ -20,6 +20,7 @@ const getters = {
   version: state => state.app.version,
   theme: state => state.app.theme,
   color: state => state.app.color,
+  metrics: state => state.app.metrics,
   token: state => state.user.token,
   project: state => state.user.project,
   avatar: state => state.user.avatar,
diff --git a/src/store/modules/app.js b/src/store/modules/app.js
index c954ff6..e68cf44 100644
--- a/src/store/modules/app.js
+++ b/src/store/modules/app.js
@@ -42,7 +42,8 @@ const app = {
     autoHideHeader: false,
     color: null,
     inverted: true,
-    multiTab: true
+    multiTab: true,
+    metrics: false
   },
   mutations: {
     SET_SIDEBAR_TYPE: (state, type) => {
@@ -91,6 +92,9 @@ const app = {
     TOGGLE_MULTI_TAB: (state, bool) => {
       Vue.ls.set(DEFAULT_MULTI_TAB, bool)
       state.multiTab = bool
+    },
+    SET_METRICS: (state, bool) => {
+      state.metrics = bool
     }
   },
   actions: {
@@ -132,6 +136,9 @@ const app = {
     },
     ToggleMultiTab ({ commit }, bool) {
       commit('TOGGLE_MULTI_TAB', bool)
+    },
+    SetMetrics ({ commit }, bool) {
+      commit('SET_METRICS', bool)
     }
   }
 }
diff --git a/src/views/AutogenView.vue b/src/views/AutogenView.vue
index 712967f..9ade5aa 100644
--- a/src/views/AutogenView.vue
+++ b/src/views/AutogenView.vue
@@ -31,6 +31,13 @@
                 @click="fetchData()">
                 {{ $t('label.refresh') }}
               </a-button>
+              <a-switch
+                v-if="!dataView && ['vm', 'volume', 'zone', 'cluster', 'host', 
'storagepool'].includes($route.name)"
+                style="margin-left: 8px"
+                :checked-children="$t('label.metrics')"
+                :un-checked-children="$t('label.metrics')"
+                :checked="$store.getters.metrics"
+                @change="(checked, event) => { $store.dispatch('SetMetrics', 
checked) }"/>
               <a-tooltip placement="right">
                 <template slot="title">
                   {{ $t('label.filterby') }}
@@ -62,9 +69,9 @@
             :resource="resource"
             @exec-action="execAction"/>
           <a-input-search
+            v-if="!dataView"
             style="width: 100%; display: table-cell"
             :placeholder="$t('label.search')"
-            v-if="!dataView"
             v-model="searchQuery"
             allowClear
             @search="onSearch" />
@@ -383,6 +390,9 @@ export default {
       if (to !== from) {
         this.fetchData()
       }
+    },
+    '$store.getters.metrics' (oldVal, newVal) {
+      this.fetchData()
     }
   },
   methods: {

Reply via email to