From 54b9d43e43e2d6ab2212ba9abbac04290de925e0 Mon Sep 17 00:00:00 2001 From: Niclas Berglind Date: Wed, 24 Sep 2014 15:18:00 +0200 Subject: [PATCH] Added columns to overview and implemented object details window. Signed-off-by: Niclas Berglind --- .../omv/module/admin/storage/zfs/Overview.js | 75 ++++++++++++++++++- gui/rpc/zfs.inc | 36 +++++++++ src/Utils.php | 21 ++++++ 3 files changed, 129 insertions(+), 3 deletions(-) diff --git a/gui/js/omv/module/admin/storage/zfs/Overview.js b/gui/js/omv/module/admin/storage/zfs/Overview.js index f235799..3230435 100644 --- a/gui/js/omv/module/admin/storage/zfs/Overview.js +++ b/gui/js/omv/module/admin/storage/zfs/Overview.js @@ -3,6 +3,38 @@ // require("js/omv/workspace/window/Grid.js") // require("js/omv/form/field/CheckboxGrid.js") +Ext.define("OMV.module.admin.storage.zfs.ShowDetails", { + extend: "OMV.workspace.window.Form", + requires: [ + "OMV.data.Store", + "OMV.data.Model", + "OMV.data.proxy.Rpc", + ], + + rpcService: "ZFS", + title: _("Object details"), + autoLoadData: true, + hideResetButton: true, + hideCancelButton: true, + width: 550, + height: 350, + layout: 'fit', + okButtonText: _("Ok"), + + getFormItems: function() { + var me = this; + + return [{ + xtype: "textareafield", + name: "details", + grow: true, + anchor: '100%', + readOnly: true + }]; + + } +}); + Ext.define("OMV.module.admin.storage.zfs.AddPool", { extend: "OMV.workspace.window.Form", requires: [ @@ -539,6 +571,30 @@ Ext.define("OMV.module.admin.storage.zfs.Overview", { sortable: true, flex: 1, stateId: 'type' + },{ + text: _("Size"), + dataIndex: 'size', + sortable: true, + flex: 1, + stateId: 'size' + },{ + text: _("Used"), + dataIndex: 'used', + sortable: true, + flex: 1, + stateId: 'used' + },{ + text: _("Available"), + dataIndex: 'available', + sortable: true, + flex: 1, + stateId: 'available' + },{ + text: _("Mountpoint"), + dataIndex: 'mountpoint', + sortable: true, + flex: 1, + stateId: 'mountpoint' },{ text: _("Share"), xtype: 'actioncolumn', @@ -564,14 +620,23 @@ Ext.define("OMV.module.admin.storage.zfs.Overview", { return true; } } - - },{ text: _("Details"), xtype: 'actioncolumn', tooltip: 'Details', align: 'center', - icon: 'images/search.png' + icon: 'images/search.png', + handler: function(view, rowIndex, colIndex, item, e, record, row) { + var me = this; + Ext.create("OMV.module.admin.storage.zfs.ShowDetails", { + title: _("Object details"), + rpcGetMethod: "getObjectDetails", + rpcGetParams: { + name: record.get('path'), + type: record.get('type') + } + }).show(); + } },{ text: _("Shared"), dataIndex: 'shared', @@ -590,6 +655,10 @@ Ext.define("OMV.module.admin.storage.zfs.Overview", { fields: [ { name: "name", type: "string" }, { name: "type", type: "string" }, + { name: "size", type: "string" }, + { name: "used", type: "string" }, + { name: "available", type: "string" }, + { name: "mountpoint", type: "string" }, { name: "id", type: "string" }, { name: "path", type: "string" }, { name: "origin", type: "string", defaultValue: "none" }, diff --git a/gui/rpc/zfs.inc b/gui/rpc/zfs.inc index 3a98d58..7a6b364 100644 --- a/gui/rpc/zfs.inc +++ b/gui/rpc/zfs.inc @@ -30,6 +30,7 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { $this->registermethod("inherit"); $this->registermethod("getSharedParams"); $this->registermethod("createShare"); + $this->registermethod("getObjectDetails"); } public function addPool($params, $context) { @@ -460,6 +461,41 @@ class OMVRpcServiceZFS extends OMVRpcServiceAbstract { return $object; } + public function getObjectDetails($params, $context) { + $this->validateMethodContext($context, array("role" => OMV_ROLE_ADMINISTRATOR)); + // Validate the parameters of the RPC service method. + $this->validateMethodParams($params, '{ + "type":"object", + "properties":{ + "name":{"type":"string"}, + "type":{"type":"string"} + } + }'); + $output = ""; + switch ($params['type']) { + case "Filesystem": + $output .= "Filesystem details (zfs get all):\n\r\n\r"; + $cmd = "zfs get all {$params['name']}"; + break; + case "Volume": + $output .= "Volume details (zfs get all):\n\r\n\r"; + $cmd = "zfs get all {$params['name']}"; + break; + case "Snapshot": + $output .= "Snapshot details (zfs get all):\n\r\n\r"; + $cmd = "zfs get all {$params['name']}"; + break; + case "Pool": + $output .= "Pool details (zpool get all):\n\r\n\r"; + $cmd = "zpool get all {$params['name']}"; + break; + default: + throw new OMVModuleZFSException("Incorrect type provided"); + } + OMVModuleZFSUtil::exec($cmd,$out,$res); + $output .= implode("\n\r", $out); + return array("details" => $output); + } } // Register the RPC service. diff --git a/src/Utils.php b/src/Utils.php index 5356223..5658265 100644 --- a/src/Utils.php +++ b/src/Utils.php @@ -2,6 +2,7 @@ require_once("Exception.php"); require_once("openmediavault/util.inc"); require_once("Dataset.php"); +require_once("Zvol.php"); require_once("Vdev.php"); require_once("Zpool.php"); @@ -197,6 +198,11 @@ class OMVModuleZFSUtil { 'icon'=>'images/raid.png', 'expanded'=>$expanded, 'path'=>$path); + $pool = new OMVModuleZFSZpool($path); + $tmp['size'] = $pool->getSize(); + $tmp['used'] = "n/a"; + $tmp['available'] = "n/a"; + $tmp['mountpoint'] = $pool->getMountPoint(); array_push($objects,$tmp); } else { //This is a Filesystem @@ -216,6 +222,12 @@ class OMVModuleZFSUtil { //This is a standard Filesystem. $tmp['type']= ucfirst($type); } + $tmp['size'] = "n/a"; + $used = $ds->getProperty("used"); + $tmp['used'] = $used['value']; + $available = $ds->getProperty("available"); + $tmp['available'] = $available['value']; + $tmp['mountpoint'] = $ds->getMountPoint(); array_push($objects,$tmp); } break; @@ -229,6 +241,11 @@ class OMVModuleZFSUtil { 'icon'=>"images/save.png", 'path'=>$path, 'expanded'=>$expanded); + $vol = new OMVModuleZFSZvol(); + $tmp['size'] = $vol->getSize(); + $tmp['used'] = "n/a"; + $tmp['available'] = "n/a"; + $tmp['mountpoint'] = "n/a"; array_push($objects,$tmp); break; @@ -243,6 +260,10 @@ class OMVModuleZFSUtil { 'icon'=>'images/zfs_snap.png', 'path'=>$path, 'expanded'=>$expanded); + $tmp['size'] = "n/a"; + $tmp['used'] = "n/a"; + $tmp['available'] = "n/a"; + $tmp['mountpoint'] = "n/a"; array_push($objects,$tmp); break; -- 2.39.2