From 09555c80de212825b483e2c3200e382078332c9a Mon Sep 17 00:00:00 2001 From: Yian Zong Date: Wed, 14 Jun 2023 08:01:10 +0000 Subject: [PATCH] Adds a new Manila driver for Dell PowerStore storage backend Adds a new Manila driver to support Dell PowerStore storage backend. It will support NFS share operations and snapshot operations. Implements: blueprint dell-powerstore-manila-driver Change-Id: If0d0a7820a1ae2392e5e0e4a4b65c4e631f4c3d4 --- doc/source/admin/index.rst | 1 + ...hare_back_ends_feature_support_mapping.rst | 8 + .../shared-file-systems/drivers.rst | 1 + .../drivers/dell-emc-powerstore-driver.rst | 186 + manila/share/drivers/dell_emc/driver.py | 7 +- .../dell_emc/plugins/powerstore/__init__.py | 0 .../dell_emc/plugins/powerstore/client.py | 412 + .../dell_emc/plugins/powerstore/connection.py | 510 ++ .../dell_emc/plugins/powerstore/__init__.py | 0 .../mockup/clone_snapshot_response.json | 3 + .../mockup/create_filesystem_response.json | 3 + .../mockup/create_nfs_export_response.json | 3 + .../mockup/create_smb_share_response.json | 3 + .../mockup/create_snapshot_response.json | 3 + .../mockup/get_cluster_id_response.json | 5 + .../mockup/get_fileystem_id_response.json | 5 + .../get_fsid_from_export_name_response.json | 5 + .../get_fsid_from_share_name_response.json | 5 + .../mockup/get_nas_server_id_response.json | 5 + .../get_nas_server_interfaces_response.json | 10 + .../get_nas_server_smb_netbios_response.json | 11 + .../mockup/get_nfs_export_id_response.json | 5 + .../mockup/get_nfs_export_name_response.json | 3 + .../mockup/get_smb_share_id_response.json | 5 + ...ze_filesystem_shrink_failure_response.json | 12 + ...ive_cluster_capacity_metrics_response.json | 6914 +++++++++++++++++ .../plugins/powerstore/test_client.py | 674 ++ .../plugins/powerstore/test_connection.py | 1013 +++ .../share/drivers/dell_emc/test_driver.py | 80 +- ...rstore-manila-driver-263489b0d0b10e2e.yaml | 5 + setup.cfg | 1 + 31 files changed, 9893 insertions(+), 5 deletions(-) create mode 100644 doc/source/configuration/shared-file-systems/drivers/dell-emc-powerstore-driver.rst create mode 100644 manila/share/drivers/dell_emc/plugins/powerstore/__init__.py create mode 100644 manila/share/drivers/dell_emc/plugins/powerstore/client.py create mode 100644 manila/share/drivers/dell_emc/plugins/powerstore/connection.py create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/__init__.py create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/clone_snapshot_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_filesystem_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_nfs_export_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_smb_share_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_snapshot_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_cluster_id_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fileystem_id_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_export_name_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_share_name_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_id_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_interfaces_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_smb_netbios_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_id_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_name_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_smb_share_id_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/resize_filesystem_shrink_failure_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/retreive_cluster_capacity_metrics_response.json create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/test_client.py create mode 100644 manila/tests/share/drivers/dell_emc/plugins/powerstore/test_connection.py create mode 100644 releasenotes/notes/bp-dell-powerstore-manila-driver-263489b0d0b10e2e.yaml diff --git a/doc/source/admin/index.rst b/doc/source/admin/index.rst index 8bda328984..d01b2f1593 100644 --- a/doc/source/admin/index.rst +++ b/doc/source/admin/index.rst @@ -85,6 +85,7 @@ each back end. emc_isilon_driver emc_vnx_driver ../configuration/shared-file-systems/drivers/dell-emc-unity-driver + ../configuration/shared-file-systems/drivers/dell-emc-powerstore-driver generic_driver glusterfs_driver glusterfs_native_driver diff --git a/doc/source/admin/share_back_ends_feature_support_mapping.rst b/doc/source/admin/share_back_ends_feature_support_mapping.rst index f0d93c4a95..0804559e0c 100644 --- a/doc/source/admin/share_back_ends_feature_support_mapping.rst +++ b/doc/source/admin/share_back_ends_feature_support_mapping.rst @@ -51,6 +51,8 @@ Mapping of share drivers and share features support +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | EMC Isilon | K | \- | M | \- | K | K | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ +| Dell EMC PowerStore | B | \- | B | B | B | B | \- | B | \- | ++----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | GlusterFS | J | \- | directory layout (T) | directory layout (T) | volume layout (L) | volume layout (L) | \- | \- | \- | +----------------------------------------+-----------------------+-----------------------+--------------------------+--------------------------+------------------------+-----------------------------------+--------------------------+--------------------+--------------------+ | GlusterFS-Native | J | \- | \- | \- | K | L | \- | \- | \- | @@ -124,6 +126,8 @@ Mapping of share drivers and share access rules support +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | EMC Isilon | NFS,CIFS (K) | \- | CIFS (M) | \- | \- | NFS (M) | \- | CIFS (M) | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ +| Dell EMC PowerStore | NFS (B) | \- | CIFS (B) | \- | \- | NFS (B) | \- | CIFS (B) | \- | \- | ++----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | GlusterFS | NFS (J) | \- | \- | \- | \- | \- | \- | \- | \- | \- | +----------------------------------------+--------------+--------------+----------------+------------+--------------+--------------+--------------+----------------+------------+------------+ | GlusterFS-Native | \- | \- | \- | J | \- | \- | \- | \- | \- | \- | @@ -195,6 +199,8 @@ Mapping of share drivers and security services support +----------------------------------------+------------------+-----------------+------------------+ | EMC Isilon | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ +| Dell EMC PowerStore | B | \- | \- | ++----------------------------------------+------------------+-----------------+------------------+ | GlusterFS | \- | \- | \- | +----------------------------------------+------------------+-----------------+------------------+ | GlusterFS-Native | \- | \- | \- | @@ -268,6 +274,8 @@ More information: :ref:`capabilities_and_extra_specs` +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+ | EMC Isilon | \- | K | \- | \- | \- | L | \- | K | \- | \- | P | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+ +| Dell EMC PowerStore | \- | B | \- | \- | B | \- | \- | B | B | \- | B | \- | \- | ++----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+ | GlusterFS | \- | J | \- | \- | \- | L | \- | volume layout (L) | \- | \- | P | \- | \- | +----------------------------------------+-----------+------------+--------+-------------+-------------------+--------------------+-----+----------------------------+--------------------+--------------------+--------------+--------------+-------------------------+ | GlusterFS-Native | \- | J | \- | \- | \- | L | \- | L | \- | \- | P | \- | \- | diff --git a/doc/source/configuration/shared-file-systems/drivers.rst b/doc/source/configuration/shared-file-systems/drivers.rst index f2edb69009..09ade410f2 100644 --- a/doc/source/configuration/shared-file-systems/drivers.rst +++ b/doc/source/configuration/shared-file-systems/drivers.rst @@ -15,6 +15,7 @@ Share drivers drivers/dell-emc-powermax-driver.rst drivers/dell-emc-unity-driver.rst drivers/dell-emc-vnx-driver.rst + drivers/dell-emc-powerstore-driver.rst drivers/glusterfs-driver.rst drivers/glusterfs-native-driver.rst drivers/hdfs-native-driver.rst diff --git a/doc/source/configuration/shared-file-systems/drivers/dell-emc-powerstore-driver.rst b/doc/source/configuration/shared-file-systems/drivers/dell-emc-powerstore-driver.rst new file mode 100644 index 0000000000..269b2b7806 --- /dev/null +++ b/doc/source/configuration/shared-file-systems/drivers/dell-emc-powerstore-driver.rst @@ -0,0 +1,186 @@ +=========================== +Dell EMC PowerStore Plugin +=========================== + +The Dell EMC Shared File Systems service driver framework (EMCShareDriver) +utilizes the Dell EMC storage products to provide the shared file systems +to OpenStack. The Dell EMC driver is a plug-in based driver which is designed +to use different plug-ins to manage different Dell EMC storage products. + +The PowerStore plug-in manages the PowerStore to provide shared file systems. +The Dell EMC driver framework with the PowerStore plug-in is referred to as the +PowerStore driver in this document. + +This driver performs the operations on PowerStore through RESTful APIs. Each backend +manages one PowerStore storage system. Configure multiple Shared File Systems service +backends to manage multiple PowerStore systems. + + +Requirements +------------ + +- PowerStore version 3.0 or higher. +- PowerStore File is enabled. + + +Supported shared filesystems and operations +------------------------------------------- + +The driver supports NFS shares and CIFS shares. + +The following operations are supported. + +- Create a share. +- Delete a share. +- Allow share access. +- Deny share access. +- Extend a share. +- Shrink a share. +- Create a snapshot. +- Delete a snapshot. +- Create a share from a snapshot. +- Revert a share to a snapshot. + + +Driver configuration +-------------------- + +Edit the configuration file ``/etc/manila/manila.conf``. + +* Add a section for the PowerStore driver backend. + +* Under the ``[DEFAULT]`` section, set the ``enabled_share_backends`` parameter + with the name of the new backend section. + +* Configure the driver backend section with the parameters below. + + .. code-block:: ini + + share_driver = manila.share.drivers.dell_emc.driver.EMCShareDriver + emc_share_backend = powerstore + dell_nas_backend_host = + dell_nas_server = + dell_ad_domain = + dell_nas_login = + dell_nas_password = + share_backend_name = + dell_ssl_cert_verify = True/False + dell_ssl_cert_path = + + Where: + + +---------------------------------+----------------------------------------------------+ + | **Parameter** | **Description** | + +=================================+====================================================+ + | ``share_driver`` | Full path of the EMCShareDriver used to enable | + | | the plugin. | + +---------------------------------+----------------------------------------------------+ + | ``emc_share_backend`` | The plugin name. Set it to `powerstore` to | + | | enable the PowerStore driver. | + +---------------------------------+----------------------------------------------------+ + | ``dell_nas_backend_host`` | The management IP of the PowerStore system. | + +---------------------------------+----------------------------------------------------+ + | ``dell_nas_server`` | The name of the NAS server in the | + | | PowerStore system. | + +---------------------------------+----------------------------------------------------+ + | ``dell_ad_domain`` | The name of the Active Directory Domain. | + | | Only applicable when the SMB server joins | + | | to the Active Directory Domain. | + +---------------------------------+----------------------------------------------------+ + | ``dell_nas_login`` | The login to use to connect to the PowerStore | + | | system. It must have administrator privileges. | + +---------------------------------+----------------------------------------------------+ + | ``dell_nas_password`` | The password associated with the login. | + +---------------------------------+----------------------------------------------------+ + | ``share_backend_name`` | The share backend name for a given driver | + | | implementation. | + +---------------------------------+----------------------------------------------------+ + | ``dell_ssl_cert_verify`` | The https client validates the SSL certificate of | + | | the PowerStore endpoint. Optional. | + | | Value: True or False. | + | | Default: False. | + +---------------------------------+----------------------------------------------------+ + | ``dell_ssl_cert_path`` | The path to PowerStore SSL certificate on | + | | Manila host. Optional. | + +---------------------------------+----------------------------------------------------+ + +Restart of ``manila-share`` service is needed for the configuration +changes to take effect. + + +Pre-configurations for share support (DHSS=False) +-------------------------------------------------- + +To create a file share in this mode, you need to: + +#. Create NAS server with network interface in PowerStore system. +#. Set 'dell_nas_server' in ``/etc/manila/manila.conf``: + + .. code-block:: ini + + dell_nas_server = + +#. Create the share type with driver_handles_share_servers = False extra + specification: + + .. code-block:: console + + $ openstack share type create ${share_type_name} False + +#. Map this share type to the share backend name + + .. code-block:: console + + $ openstack share type set ${share_type_name} \ + --extra-specs share_backend_name=${share_backend_name} + +#. Create NFS share. + + .. code-block:: console + + $ openstack share create NFS ${size} --name ${share_name} --share-type ${share_type_name} + + +Pre-configurations for snapshot support +--------------------------------------- + +The driver can: +- create/delete a snapshot +- create a share from a snapshot +- revert a share to a snapshot + +The following extra specifications need to be configured with share type. + +- snapshot_support = True +- create_share_from_snapshot_support = True +- revert_to_snapshot_support = True + +For new share type, these extra specifications can be set directly when +creating share type: + + .. code-block:: console + + $ openstack share type create ${share_type_name} False \ + --snapshot-support=True \ + --create-share-from-snapshot-support=True \ + --revert-to-snapshot-support=True + +Or you can update already existing share type with command: + + .. code-block:: console + + $ openstack share type set ${share_type_name} \ + --extra-specs snapshot_support=True \ + create_share_from_snapshot_support=True \ + revert_to_snapshot_support=True + +Known restrictions +------------------ + +The PowerStore driver has the following restrictions. + +- Minimum share size is 3GiB. +- Only IP access type is supported for NFS shares. +- Only user access type is supported for CIFS shares. +- Only DHSS=False is supported. +- Modification of CIFS share access is supported in PowerStore 3.5 and above. diff --git a/manila/share/drivers/dell_emc/driver.py b/manila/share/drivers/dell_emc/driver.py index f786eadc94..13d2756dd2 100644 --- a/manila/share/drivers/dell_emc/driver.py +++ b/manila/share/drivers/dell_emc/driver.py @@ -41,7 +41,8 @@ EMC_NAS_OPTS = [ help='Use secure connection to server.'), cfg.StrOpt('emc_share_backend', ignore_case=True, - choices=['isilon', 'vnx', 'unity', 'vmax', 'powermax'], + choices=['isilon', 'vnx', 'unity', 'vmax', 'powermax', + 'powerstore'], help='Share backend.'), cfg.StrOpt('emc_nas_root_dir', help='The root directory where shares will be located.'), @@ -258,8 +259,8 @@ class EMCShareDriver(driver.ShareDriver): def update_access(self, context, share, access_rules, add_rules, delete_rules, share_server=None): """Update access to the share.""" - self.plugin.update_access(context, share, access_rules, add_rules, - delete_rules, share_server) + return self.plugin.update_access(context, share, access_rules, + add_rules, delete_rules, share_server) def check_for_setup_error(self): """Check for setup error.""" diff --git a/manila/share/drivers/dell_emc/plugins/powerstore/__init__.py b/manila/share/drivers/dell_emc/plugins/powerstore/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/manila/share/drivers/dell_emc/plugins/powerstore/client.py b/manila/share/drivers/dell_emc/plugins/powerstore/client.py new file mode 100644 index 0000000000..b810244f9d --- /dev/null +++ b/manila/share/drivers/dell_emc/plugins/powerstore/client.py @@ -0,0 +1,412 @@ +# Copyright (c) 2023 Dell Inc. or its subsidiaries. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""REST client for Dell EMC PowerStore Manila Driver.""" + +import functools +import json + +from oslo_log import log as logging +from oslo_utils import strutils +import requests + +LOG = logging.getLogger(__name__) + + +class PowerStoreClient(object): + def __init__(self, + rest_ip, + rest_username, + rest_password, + verify_certificate=False, + certificate_path=None): + self.rest_ip = rest_ip + self.rest_username = rest_username + self.rest_password = rest_password + self.verify_certificate = verify_certificate + self.certificate_path = certificate_path + self.base_url = "https://%s/api/rest" % self.rest_ip + self.ok_codes = [ + requests.codes.ok, + requests.codes.created, + requests.codes.accepted, + requests.codes.no_content, + requests.codes.partial_content + ] + + @property + def _verify_cert(self): + verify_cert = self.verify_certificate + if self.verify_certificate and self.certificate_path: + verify_cert = self.certificate_path + return verify_cert + + def _send_request(self, + method, + url, + payload=None, + params=None, + log_response_data=True): + if not params: + params = {} + request_params = { + "auth": (self.rest_username, self.rest_password), + "verify": self._verify_cert, + "params": params + } + if payload and method != "GET": + request_params["data"] = json.dumps(payload) + request_url = self.base_url + url + r = requests.request(method, request_url, **request_params) + + log_level = logging.DEBUG + if r.status_code not in self.ok_codes: + log_level = logging.ERROR + LOG.log(log_level, + "REST Request: %s %s with body %s", + r.request.method, + r.request.url, + strutils.mask_password(r.request.body)) + if log_response_data or log_level == logging.ERROR: + msg = "REST Response: %s with data %s" % (r.status_code, r.text) + else: + msg = "REST Response: %s" % r.status_code + LOG.log(log_level, msg) + + try: + response = r.json() + except ValueError: + response = None + return r, response + + _send_get_request = functools.partialmethod(_send_request, "GET") + _send_post_request = functools.partialmethod(_send_request, "POST") + _send_patch_request = functools.partialmethod(_send_request, "PATCH") + _send_delete_request = functools.partialmethod(_send_request, "DELETE") + + def get_nas_server_id(self, nas_server_name): + """Retrieves the NAS server ID. + + :param nas_server_name: NAS server name + :return: ID of the NAS server if success + """ + url = '/nas_server?name=eq.' + nas_server_name + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response[0]['id'] + + def get_nas_server_interfaces(self, nas_server_id): + """Retrieves the NAS server ID. + + :param nas_server_id: NAS server ID + :return: File interfaces of the NAS server if success + """ + url = '/nas_server/' + nas_server_id + \ + '?select=current_preferred_IPv4_interface_id,' \ + 'current_preferred_IPv6_interface_id,' \ + 'file_interfaces(id,ip_address)' + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + preferred_IP = [response['current_preferred_IPv4_interface_id'], + response['current_preferred_IPv6_interface_id']] + file_interfaces = [] + for i in response['file_interfaces']: + file_interfaces.append({ + 'ip': i['ip_address'], + 'preferred': i['id'] in preferred_IP + }) + return file_interfaces + + def create_filesystem(self, nas_server_id, name, size): + """Creates a filesystem. + + :param nas_server_id: ID of the nas_server + :param name: name of the filesystem + :param size: size in Byte + :return: ID of the filesystem if created successfully + """ + payload = { + "name": name, + "size_total": size, + "nas_server_id": nas_server_id + } + url = '/file_system' + res, response = self._send_post_request(url, payload) + if res.status_code == requests.codes.created: + return response["id"] + + def create_nfs_export(self, filesystem_id, name): + """Creates an NFS export. + + :param filesystem_id: ID of the filesystem on which + the export will be created + :param name: name of the NFS export + :return: ID of the export if created successfully + """ + payload = { + "file_system_id": filesystem_id, + "path": "/" + str(name), + "name": name + } + url = '/nfs_export' + res, response = self._send_post_request(url, payload) + if res.status_code == requests.codes.created: + return response["id"] + + def delete_filesystem(self, filesystem_id): + """Deletes a filesystem and all associated export. + + :param filesystem_id: ID of the filesystem to delete + :return: True if deleted successfully + """ + url = '/file_system/' + filesystem_id + res, _ = self._send_delete_request(url) + return res.status_code == requests.codes.no_content + + def get_nfs_export_name(self, export_id): + """Retrieves NFS Export name. + + :param export_id: ID of the NFS export + :return: path of the NFS export if success + """ + url = '/nfs_export/' + export_id + '?select=name' + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response["name"] + + def get_nfs_export_id(self, name): + """Retrieves NFS Export ID. + + :param name: name of the NFS export + :return: id of the NFS export if success + """ + url = '/nfs_export?select=id&name=eq.' + name + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response[0]['id'] + + def get_filesystem_id(self, name): + """Retrieves an ID for a filesystem. + + :param name: name of the filesystem + :return: ID of the filesystem if success + """ + url = '/file_system?name=eq.' + name + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response[0]['id'] + + def set_export_access(self, export_id, rw_hosts, ro_hosts): + """Sets the access hosts on the export. + + :param export_id: NFS export ID + :param rw_hosts: a set of RW hosts + :param ro_hosts: a set of RO hosts + :return: True if operation succeeded + """ + payload = { + "read_only_hosts": list(ro_hosts), + "read_write_root_hosts": list(rw_hosts) + } + url = '/nfs_export/' + export_id + res, _ = self._send_patch_request(url, payload) + return res.status_code == requests.codes.no_content + + def resize_filesystem(self, filesystem_id, new_size): + """Extends the size of a share to a new size. + + :param export_id: ID of the NFS export + :param new_size: new size to allocate in bytes + :return: True if extended successfully + """ + payload = { + "size_total": new_size + } + url = '/file_system/' + filesystem_id + res, response = self._send_patch_request(url, payload) + if res.status_code == requests.codes.unprocessable and \ + response['messages'][0]['code'] == '0xE08010080449': + return False, response['messages'][0]['message_l10n'] + return res.status_code == requests.codes.no_content, None + + def get_fsid_from_export_name(self, name): + """Retieves the Filesystem ID used by an export. + + :param name: name of the export + :return: ID of the Filesystem which owns the export + """ + url = '/nfs_export?select=file_system_id&name=eq.' + name + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response[0]['file_system_id'] + + def create_snapshot(self, filesystem_id, name): + """Creates a snapshot of a filesystem. + + :param filesystem_id: ID of the filesystem + :param name: name of the snapshot + :return: ID of the snapshot if created successfully + """ + payload = { + "name": name + } + url = '/file_system/' + filesystem_id + '/snapshot' + res, response = self._send_post_request(url, payload) + if res.status_code == requests.codes.created: + return response["id"] + + def restore_snapshot(self, snapshot_id): + """Restore a snapshot of a filesystem. + + :param snapshot_id: ID of the snapshot + :return: True if operation succeeded + """ + url = '/file_system/' + snapshot_id + '/restore' + res, _ = self._send_post_request(url) + return res.status_code == requests.codes.no_content + + def clone_snapshot(self, snapshot_id, name): + """Clone a snapshot of a filesystem. + + :param snapshot_id: ID of the snapshot + :param name: name the snapshot + :return: ID of the clone if created successfully + """ + payload = { + "name": name + } + url = '/file_system/' + snapshot_id + '/clone' + res, response = self._send_post_request(url, payload) + if res.status_code == requests.codes.created: + return response["id"] + + def get_cluster_id(self): + """Get cluster id. + + :return: ID of the cluster + """ + url = '/cluster' + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response[0]["id"] + + def retreive_cluster_capacity_metrics(self, cluster_id): + """Retreive cluster capacity metrics. + + :param cluster_id: ID of the cluster + :return: total and used capacity in Byte + """ + payload = { + "entity": "space_metrics_by_cluster", + "entity_id": cluster_id + } + url = '/metrics/generate?order=timestamp' + # disable logging of the response + res, response = self._send_post_request(url, payload, + log_response_data=False) + if res.status_code == requests.codes.ok: + # latest cluster capacity metrics + latestMetrics = response[len(response) - 1] + LOG.debug(f"Latest cluster capacity: {latestMetrics}") + return (latestMetrics["physical_total"], + latestMetrics["physical_used"]) + return None, None + + def create_smb_share(self, filesystem_id, name): + """Creates a SMB share. + + :param filesystem_id: ID of the filesystem on which + the export will be created + :param name: name of the SMB share + :return: ID of the share if created successfully + """ + payload = { + "file_system_id": filesystem_id, + "path": "/" + str(name), + "name": name + } + url = '/smb_share' + res, response = self._send_post_request(url, payload) + if res.status_code == requests.codes.created: + return response["id"] + + def get_fsid_from_share_name(self, name): + """Retieves the Filesystem ID used by a SMB share. + + :param name: name of the SMB share + :return: ID of the Filesystem which owns the share + """ + url = '/smb_share?select=file_system_id&name=eq.' + name + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response[0]['file_system_id'] + + def get_smb_share_id(self, name): + """Retrieves SMB share ID. + + :param name: name of the SMB share + :return: id of the SMB share if success + """ + url = '/smb_share?select=id&name=eq.' + name + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + return response[0]['id'] + + def get_nas_server_smb_netbios(self, nas_server_name): + """Retrieves the domain name or netbios name. + + :param nas_server_name: NAS server name + :return: Netbios name of SMB server if success + """ + url = '/nas_server?select=smb_servers(is_standalone,netbios_name)' \ + '&name=eq.' + nas_server_name + res, response = self._send_get_request(url) + if res.status_code == requests.codes.ok: + smb_server = response[0]['smb_servers'][0] + if smb_server["is_standalone"]: + return smb_server["netbios_name"] + + def set_acl(self, smb_share_id, cifs_rw_users, cifs_ro_users): + """Set ACL for a SMB share. + + :param smb_share_id: ID of the SMB share + :param name: name of the SMB share + :return: ID of the share if created successfully + """ + aces = list() + for rw_user in cifs_rw_users: + ace = { + "trustee_type": "User", + "trustee_name": rw_user, + "access_level": "Change", + "access_type": "Allow" + } + aces.append(ace) + + for ro_user in cifs_ro_users: + ace = { + "trustee_type": "User", + "trustee_name": ro_user, + "access_level": "Read", + "access_type": "Allow" + } + aces.append(ace) + + payload = { + "aces": aces + } + url = '/smb_share/' + smb_share_id + '/set_acl' + res, _ = self._send_post_request(url, payload) + return res.status_code == requests.codes.no_content diff --git a/manila/share/drivers/dell_emc/plugins/powerstore/connection.py b/manila/share/drivers/dell_emc/plugins/powerstore/connection.py new file mode 100644 index 0000000000..6cb1d9cdf0 --- /dev/null +++ b/manila/share/drivers/dell_emc/plugins/powerstore/connection.py @@ -0,0 +1,510 @@ +# Copyright (c) 2023 Dell Inc. or its subsidiaries. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +PowerStore specific NAS backend plugin. +""" +from oslo_config import cfg +from oslo_log import log +from oslo_utils import units + +from manila.common import constants as const +from manila import exception +from manila.i18n import _ +from manila.share.drivers.dell_emc.plugins import base as driver +from manila.share.drivers.dell_emc.plugins.powerstore import client + +"""Version history: + 1.0 - Initial version +""" +VERSION = "1.0" + +CONF = cfg.CONF + +LOG = log.getLogger(__name__) + +POWERSTORE_OPTS = [ + cfg.StrOpt('dell_nas_backend_host', + help='Dell NAS backend hostname or IP address.'), + cfg.StrOpt('dell_nas_server', + help='Root directory or NAS server which owns the shares.'), + cfg.StrOpt('dell_ad_domain', + help='Domain name of the active directory ' + 'joined by the NAS server.'), + cfg.StrOpt('dell_nas_login', + help='User name for the Dell NAS backend.'), + cfg.StrOpt('dell_nas_password', + secret=True, + help='Password for the Dell NAS backend.'), + cfg.BoolOpt('dell_ssl_cert_verify', + default=False, + help='If set to False the https client will not validate the ' + 'SSL certificate of the backend endpoint.'), + cfg.StrOpt('dell_ssl_cert_path', + help='Can be used to specify a non default path to a ' + 'CA_BUNDLE file or directory with certificates of trusted ' + 'CAs, which will be used to validate the backend.') +] + + +class PowerStoreStorageConnection(driver.StorageConnection): + """Implements PowerStore specific functionality for Dell Manila driver.""" + + def __init__(self, *args, **kwargs): + """Do initialization""" + + LOG.debug('Invoking base constructor for Manila' + ' Dell PowerStore Driver.') + super(PowerStoreStorageConnection, + self).__init__(*args, **kwargs) + + LOG.debug('Setting up attributes for Manila' + ' Dell PowerStore Driver.') + if 'configuration' in kwargs: + kwargs['configuration'].append_config_values(POWERSTORE_OPTS) + + self.client = None + self.verify_certificate = None + self.certificate_path = None + self.ipv6_implemented = True + self.revert_to_snap_support = True + self.shrink_share_support = True + + # props from super class + self.driver_handles_share_servers = False + # props for share status update + self.reserved_percentage = None + self.reserved_snapshot_percentage = None + self.reserved_share_extend_percentage = None + self.max_over_subscription_ratio = None + + def connect(self, dell_share_driver, context): + """Connects to Dell PowerStore""" + LOG.debug('Reading configuration parameters for Manila' + ' Dell PowerStore Driver.') + config = dell_share_driver.configuration + get_config_value = config.safe_get + self.rest_ip = get_config_value("dell_nas_backend_host") + self.rest_username = get_config_value("dell_nas_login") + self.rest_password = get_config_value("dell_nas_password") + # validate IP, username and password + if not all([self.rest_ip, + self.rest_username, + self.rest_password]): + message = _("REST server IP, username and password" + " must be specified.") + raise exception.BadConfigurationException(reason=message) + self.nas_server = get_config_value("dell_nas_server") + self.ad_domain = get_config_value("dell_ad_domain") + self.verify_certificate = (get_config_value("dell_ssl_cert_verify") or + False) + if self.verify_certificate: + self.certificate_path = get_config_value( + "dell_ssl_cert_path") + + LOG.debug('Initializing Dell PowerStore REST Client.') + LOG.info("REST server IP: %(ip)s, username: %(user)s. " + "Verify server's certificate: %(verify_cert)s.", + { + "ip": self.rest_ip, + "user": self.rest_username, + "verify_cert": self.verify_certificate, + }) + + self.client = client.PowerStoreClient(self.rest_ip, + self.rest_username, + self.rest_password, + self.verify_certificate, + self.certificate_path) + + # configuration for share status update + self.reserved_percentage = config.safe_get( + 'reserved_share_percentage') + if self.reserved_percentage is None: + self.reserved_percentage = 0 + + self.reserved_snapshot_percentage = config.safe_get( + 'reserved_share_from_snapshot_percentage') + if self.reserved_snapshot_percentage is None: + self.reserved_snapshot_percentage = self.reserved_percentage + + self.reserved_share_extend_percentage = config.safe_get( + 'reserved_share_extend_percentage') + if self.reserved_share_extend_percentage is None: + self.reserved_share_extend_percentage = self.reserved_percentage + + self.max_over_subscription_ratio = config.safe_get( + 'max_over_subscription_ratio') + + def create_share(self, context, share, share_server): + """Is called to create a share.""" + LOG.debug(f'Creating {share["share_proto"]} share.') + locations = self._create_share(share) + return locations + + def _create_share(self, share): + """Creates a NFS or SMB share. + + In PowerStore, an export (share) belongs to a filesystem. + This function creates a filesystem and an export. + """ + share_name = share['name'] + size_in_bytes = share['size'] * units.Gi + # create a filesystem + nas_server_id = self.client.get_nas_server_id(self.nas_server) + LOG.debug(f"Creating filesystem {share_name}") + filesystem_id = self.client.create_filesystem(nas_server_id, + share_name, + size_in_bytes) + if not filesystem_id: + message = { + _('The filesystem "%(export)s" was not created.') % + {'export': share_name}} + LOG.error(message) + raise exception.ShareBackendException(msg=message) + # create a share + locations = self._create_share_NFS_CIFS(nas_server_id, filesystem_id, + share_name, + share['share_proto'].upper()) + return locations + + def _create_share_NFS_CIFS(self, nas_server_id, filesystem_id, share_name, + protocal): + LOG.debug(f"Get file interfaces of {nas_server_id}") + file_interfaces = self.client.get_nas_server_interfaces( + nas_server_id) + LOG.debug(f"Creating {protocal} export {share_name}") + if protocal == 'NFS': + export_id = self.client.create_nfs_export(filesystem_id, + share_name) + if not export_id: + message = ( + _('The requested NFS export "%(export)s"' + ' was not created.') % + {'export': share_name}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + locations = self._get_nfs_location(file_interfaces, share_name) + elif protocal == 'CIFS': + export_id = self.client.create_smb_share(filesystem_id, + share_name) + if not export_id: + message = ( + _('The requested SMB share "%(export)s"' + ' was not created.') % + {'export': share_name}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + locations = self._get_cifs_location(file_interfaces, + share_name) + return locations + + def _get_nfs_location(self, file_interfaces, share_name): + export_locations = [] + for interface in file_interfaces: + export_locations.append( + {'path': f"{interface['ip']}:/{share_name}", + 'metadata': { + 'preferred': interface['preferred'] + } + }) + return export_locations + + def _get_cifs_location(self, file_interfaces, share_name): + export_locations = [] + for interface in file_interfaces: + export_locations.append( + {'path': f"\\\\{interface['ip']}\\{share_name}", + 'metadata': { + 'preferred': interface['preferred'] + } + }) + return export_locations + + def delete_share(self, context, share, share_server): + """Is called to delete a share.""" + LOG.debug(f'Deleting {share["share_proto"]} share.') + self._delete_share(share) + + def _delete_share(self, share): + """Deletes a filesystem and its associated export.""" + LOG.debug(f"Retrieving filesystem ID for filesystem {share['name']}") + filesystem_id = self.client.get_filesystem_id(share['name']) + if not filesystem_id: + LOG.warning(f'Filesystem with share name {share["name"]} \ + is not found.') + else: + LOG.debug(f"Deleting filesystem ID {filesystem_id}") + share_deleted = self.client.delete_filesystem(filesystem_id) + if not share_deleted: + message = ( + _('Failed to delete share "%(export)s".') % + {'export': share['name']}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + + def extend_share(self, share, new_size, share_server): + """Is called to extend a share.""" + LOG.debug(f"Extending {share['name']} to {new_size}GiB") + self._resize_filesystem(share, new_size) + + def shrink_share(self, share, new_size, share_server): + """Is called to shrink a share.""" + LOG.debug(f"Shrinking {share['name']} to {new_size}GiB") + self._resize_filesystem(share, new_size) + + def _resize_filesystem(self, share, new_size): + """Is called to resize a filesystem""" + + # Converts the size from GiB to Bytes + new_size_in_bytes = new_size * units.Gi + filesystem_id = self.client.get_filesystem_id(share['name']) + is_success, detail = self.client.resize_filesystem(filesystem_id, + new_size_in_bytes) + if not is_success: + message = (_('Failed to resize share "%(export)s".') % + {'export': share['name']}) + LOG.error(message) + if detail: + raise exception.ShareShrinkingPossibleDataLoss( + share_id=share['id']) + raise exception.ShareBackendException(msg=message) + + def allow_access(self, context, share, access, share_server): + """Allow access to the share.""" + raise NotImplementedError() + + def deny_access(self, context, share, access, share_server): + """Deny access to the share.""" + raise NotImplementedError() + + def update_access(self, context, share, access_rules, add_rules, + delete_rules, share_server=None): + """Is called to update share access.""" + protocal = share['share_proto'].upper() + LOG.debug(f'Updating access to {protocal} share.') + if protocal == 'NFS': + return self._update_nfs_access(share, access_rules) + elif protocal == 'CIFS': + return self._update_cifs_access(share, access_rules) + + def _update_nfs_access(self, share, access_rules): + """Updates access rules for NFS share type.""" + nfs_rw_ips = set() + nfs_ro_ips = set() + access_updates = {} + + for rule in access_rules: + if rule['access_type'].lower() != 'ip': + message = (_("Only IP access type currently supported for " + "NFS. Share provided %(share)s with rule type " + "%(type)s") % {'share': share['display_name'], + 'type': rule['access_type']}) + LOG.error(message) + access_updates.update({rule['access_id']: {'state': 'error'}}) + + else: + if rule['access_level'] == const.ACCESS_LEVEL_RW: + nfs_rw_ips.add(rule['access_to']) + elif rule['access_level'] == const.ACCESS_LEVEL_RO: + nfs_ro_ips.add(rule['access_to']) + access_updates.update({rule['access_id']: {'state': 'active'}}) + + share_id = self.client.get_nfs_export_id(share['name']) + share_updated = self.client.set_export_access(share_id, + nfs_rw_ips, + nfs_ro_ips) + if not share_updated: + message = ( + _('Failed to update NFS access rules for "%(export)s".') % + {'export': share['display_name']}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + return access_updates + + def _update_cifs_access(self, share, access_rules): + """Updates access rules for CIFS share type.""" + cifs_rw_users = set() + cifs_ro_users = set() + access_updates = {} + + for rule in access_rules: + if rule['access_type'].lower() != 'user': + message = (_("Only user access type currently supported for " + "CIFS. Share provided %(share)s with rule type " + "%(type)s") % {'share': share['display_name'], + 'type': rule['access_type']}) + LOG.error(message) + access_updates.update({rule['access_id']: {'state': 'error'}}) + + else: + prefix = self.ad_domain or \ + self.client.get_nas_server_smb_netbios(self.nas_server) + if not prefix: + message = ( + _('Failed to get daomain/netbios name of ' + '"%(nas_server)s".' + ) % {'nas_server': self.nas_server}) + LOG.error(message) + access_updates.update({rule['access_id']: + {'state': 'error'}}) + continue + + prefix = prefix + '\\' + if rule['access_level'] == const.ACCESS_LEVEL_RW: + cifs_rw_users.add(prefix + rule['access_to']) + elif rule['access_level'] == const.ACCESS_LEVEL_RO: + cifs_ro_users.add(prefix + rule['access_to']) + access_updates.update({rule['access_id']: {'state': 'active'}}) + + share_id = self.client.get_smb_share_id(share['name']) + share_updated = self.client.set_acl(share_id, + cifs_rw_users, + cifs_ro_users) + if not share_updated: + message = ( + _('Failed to update NFS access rules for "%(export)s".') % + {'export': share['display_name']}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + return access_updates + + def update_share_stats(self, stats_dict): + """Retrieve stats info from share.""" + stats_dict['driver_version'] = VERSION + stats_dict['storage_protocol'] = 'NFS_CIFS' + stats_dict['reserved_percentage'] = self.reserved_percentage + stats_dict['reserved_snapshot_percentage'] = \ + self.reserved_snapshot_percentage + stats_dict['reserved_share_extend_percentage'] = \ + self.reserved_share_extend_percentage + stats_dict['max_over_subscription_ratio'] = \ + self.max_over_subscription_ratio + + cluster_id = self.client.get_cluster_id() + total, used = self.client.retreive_cluster_capacity_metrics(cluster_id) + if(total and used): + free = total - used + stats_dict['total_capacity_gb'] = total // units.Gi + stats_dict['free_capacity_gb'] = free // units.Gi + + def create_snapshot(self, context, snapshot, share_server): + """Is called to create snapshot.""" + export_name = snapshot['share_name'] + LOG.debug(f'Retrieving filesystem ID for share {export_name}') + filesystem_id = self.client.get_filesystem_id(export_name) + if not filesystem_id: + message = ( + _('Failed to get filesystem id for export "%(export)s".') % + {'export': export_name}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + snapshot_name = snapshot['name'] + LOG.debug( + f'Creating snapshot {snapshot_name} for filesystem {filesystem_id}' + ) + snapshot_id = self.client.create_snapshot(filesystem_id, + snapshot_name) + if not snapshot_id: + message = ( + _('Failed to create snapshot "%(snapshot)s".') % + {'snapshot': snapshot_name}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + else: + LOG.info("Snapshot %(snapshot)s successfully created.", + {'snapshot': snapshot_name}) + + def delete_snapshot(self, context, snapshot, share_server): + """Is called to delete snapshot.""" + snapshot_name = snapshot['name'] + LOG.debug(f'Retrieving filesystem ID for snapshot {snapshot_name}') + filesystem_id = self.client.get_filesystem_id(snapshot_name) + LOG.debug(f'Deleting filesystem ID {filesystem_id}') + snapshot_deleted = self.client.delete_filesystem(filesystem_id) + if not snapshot_deleted: + message = ( + _('Failed to delete snapshot "%(snapshot)s".') % + {'snapshot': snapshot_name}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + else: + LOG.info("Snapshot %(snapshot)s successfully deleted.", + {'snapshot': snapshot_name}) + + def revert_to_snapshot(self, context, snapshot, share_access_rules, + snapshot_access_rules, share_server=None): + """Reverts a share (in place) to the specified snapshot.""" + snapshot_name = snapshot['name'] + snapshot_id = self.client.get_filesystem_id(snapshot_name) + snapshot_restored = self.client.restore_snapshot(snapshot_id) + if not snapshot_restored: + message = ( + _('Failed to restore snapshot "%(snapshot)s".') % + {'snapshot': snapshot_name}) + LOG.error(message) + raise exception.ShareBackendException(msg=message) + else: + LOG.info("Snapshot %(snapshot)s successfully restored.", + {'snapshot': snapshot_name}) + + def create_share_from_snapshot(self, context, share, snapshot, + share_server=None, parent_share=None): + """Create a share from a snapshot - clone a snapshot.""" + LOG.debug(f'Creating {share["share_proto"]} share.') + locations = self._create_share_from_snapshot(share, snapshot) + + if share['size'] != snapshot['size']: + LOG.debug(f"Resizing {share['name']} to {share['size']}GiB") + self._resize_filesystem(share, share['size']) + + return locations + + def _create_share_from_snapshot(self, share, snapshot): + LOG.debug(f"Retrieving snapshot id of snapshot {snapshot['name']}") + snapshot_id = self.client.get_filesystem_id(snapshot['name']) + share_name = share['name'] + LOG.debug( + f"Cloning filesystem {share_name} from snapshot {snapshot_id}" + ) + filesystem_id = self.client.clone_snapshot(snapshot_id, + share_name) + if not filesystem_id: + message = { + _('The filesystem "%(export)s" was not created.') % + {'export': share_name}} + LOG.error(message) + raise exception.ShareBackendException(msg=message) + # create a share + nas_server_id = self.client.get_nas_server_id(self.nas_server) + locations = self._create_share_NFS_CIFS(nas_server_id, filesystem_id, + share_name, + share['share_proto'].upper()) + return locations + + def ensure_share(self, context, share, share_server): + """Invoked to ensure that share is exported.""" + + def setup_server(self, network_info, metadata=None): + """Set up and configures share server with given network parameters.""" + + def teardown_server(self, server_details, security_services=None): + """Teardown share server.""" + + def check_for_setup_error(self): + """Is called to check for setup error.""" + + def get_default_filter_function(self): + return 'share.size >= 3' diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/__init__.py b/manila/tests/share/drivers/dell_emc/plugins/powerstore/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/clone_snapshot_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/clone_snapshot_response.json new file mode 100644 index 0000000000..005c77cce4 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/clone_snapshot_response.json @@ -0,0 +1,3 @@ +{ + "id": "64560f05-e677-ec2a-7fcf-1a9efb93188b" +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_filesystem_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_filesystem_response.json new file mode 100644 index 0000000000..5c46e4167f --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_filesystem_response.json @@ -0,0 +1,3 @@ +{ + "id": "6454e9a9-a698-e9bc-ca61-1a9efb93188b" +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_nfs_export_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_nfs_export_response.json new file mode 100644 index 0000000000..68fd67d6f5 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_nfs_export_response.json @@ -0,0 +1,3 @@ +{ + "id": "6454ec18-7b8d-1532-1b8a-1a9efb93188b" +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_smb_share_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_smb_share_response.json new file mode 100644 index 0000000000..57ae0fcdf4 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_smb_share_response.json @@ -0,0 +1,3 @@ +{ + "id": "64927ae9-3403-6930-a784-f227b9987c54" +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_snapshot_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_snapshot_response.json new file mode 100644 index 0000000000..e31694bb68 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/create_snapshot_response.json @@ -0,0 +1,3 @@ +{ + "id": "6454ea29-09c3-030e-cfc3-1a9efb93188b" +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_cluster_id_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_cluster_id_response.json new file mode 100644 index 0000000000..c50d5ab3e5 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_cluster_id_response.json @@ -0,0 +1,5 @@ +[ + { + "id": "0" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fileystem_id_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fileystem_id_response.json new file mode 100644 index 0000000000..90279e1279 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fileystem_id_response.json @@ -0,0 +1,5 @@ +[ + { + "id": "6454e9a9-a698-e9bc-ca61-1a9efb93188b" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_export_name_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_export_name_response.json new file mode 100644 index 0000000000..f22640de10 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_export_name_response.json @@ -0,0 +1,5 @@ +[ + { + "file_system_id": "6454e9a9-a698-e9bc-ca61-1a9efb93188b" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_share_name_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_share_name_response.json new file mode 100644 index 0000000000..f22640de10 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_fsid_from_share_name_response.json @@ -0,0 +1,5 @@ +[ + { + "file_system_id": "6454e9a9-a698-e9bc-ca61-1a9efb93188b" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_id_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_id_response.json new file mode 100644 index 0000000000..726373ccea --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_id_response.json @@ -0,0 +1,5 @@ +[ + { + "id": "6423d56e-eaf3-7424-be0b-1a9efb93188b" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_interfaces_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_interfaces_response.json new file mode 100644 index 0000000000..fd573a5fbb --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_interfaces_response.json @@ -0,0 +1,10 @@ +{ + "current_preferred_IPv4_interface_id": "6423d586-4070-f752-c4da-1a9efb93188b", + "current_preferred_IPv6_interface_id": null, + "file_interfaces": [ + { + "id": "6423d586-4070-f752-c4da-1a9efb93188b", + "ip_address": "192.168.11.23" + } + ] +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_smb_netbios_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_smb_netbios_response.json new file mode 100644 index 0000000000..ab5969ed12 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nas_server_smb_netbios_response.json @@ -0,0 +1,11 @@ +[ + { + "smb_servers": [ + { + "is_standalone": true, + "domain": null, + "netbios_name": "OPENSTACK" + } + ] + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_id_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_id_response.json new file mode 100644 index 0000000000..7a4b1fec56 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_id_response.json @@ -0,0 +1,5 @@ +[ + { + "id": "6454ec18-7b8d-1532-1b8a-1a9efb93188b" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_name_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_name_response.json new file mode 100644 index 0000000000..47737d687a --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_nfs_export_name_response.json @@ -0,0 +1,3 @@ +{ + "name": "powerstore-nfs-share" +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_smb_share_id_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_smb_share_id_response.json new file mode 100644 index 0000000000..d1547ab768 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/get_smb_share_id_response.json @@ -0,0 +1,5 @@ +[ + { + "id": "64927ae9-3403-6930-a784-f227b9987c54" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/resize_filesystem_shrink_failure_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/resize_filesystem_shrink_failure_response.json new file mode 100644 index 0000000000..5d0c1ad61d --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/resize_filesystem_shrink_failure_response.json @@ -0,0 +1,12 @@ +{ + "messages": [ + { + "code": "0xE08010080449", + "severity": "Error", + "message_l10n": "The new size for the file system is below the file system's current size used (5222 MB).", + "arguments": [ + "5222" + ] + } + ] +} \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/retreive_cluster_capacity_metrics_response.json b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/retreive_cluster_capacity_metrics_response.json new file mode 100644 index 0000000000..f08dc48a1a --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/retreive_cluster_capacity_metrics_response.json @@ -0,0 +1,6914 @@ +[ + { + "timestamp": "2023-06-06T04:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91900268773376, + "logical_used": 69117132800, + "logical_used_volume": 47464128512, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22338211840, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368199442199, + "efficiency_ratio": 12341.914, + "data_reduction": 4.9288387, + "data_physical_used": 7446192809, + "snapshot_savings": 10.068099, + "thin_savings": 460.541, + "shared_logical_used": 36701081600, + "system_free_space": 140331964416, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T04:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91903489998848, + "logical_used": 69118181376, + "logical_used_volume": 47465177088, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22339260416, + "shared_logical_used_file_system": 14362865664, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368199339818, + "efficiency_ratio": 12342.247, + "data_reduction": 4.928939, + "data_physical_used": 7446252880, + "snapshot_savings": 10.068111, + "thin_savings": 460.5264, + "shared_logical_used": 36702126080, + "system_free_space": 140332295168, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T04:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91900268773376, + "logical_used": 69118181376, + "logical_used_volume": 47465177088, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22339260416, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368164442322, + "efficiency_ratio": 12341.806, + "data_reduction": 4.928936, + "data_physical_used": 7446257948, + "snapshot_savings": 10.068099, + "thin_savings": 460.5264, + "shared_logical_used": 36702130176, + "system_free_space": 140332015001, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T04:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91900268773376, + "logical_used": 69118181376, + "logical_used_volume": 47465177088, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22339260416, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368166718759, + "efficiency_ratio": 12341.7295, + "data_reduction": 4.9289055, + "data_physical_used": 7446304322, + "snapshot_savings": 10.068099, + "thin_savings": 460.5264, + "shared_logical_used": 36702130176, + "system_free_space": 140330769817, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T04:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91900268773376, + "logical_used": 69118181376, + "logical_used_volume": 47465177088, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22339260416, + "shared_logical_used_file_system": 14362865664, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368167150394, + "efficiency_ratio": 12341.69, + "data_reduction": 4.9288893, + "data_physical_used": 7446327815, + "snapshot_savings": 10.068111, + "thin_savings": 460.5264, + "shared_logical_used": 36702126080, + "system_free_space": 140329758105, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91916374900736, + "logical_used": 69255864320, + "logical_used_volume": 47602860032, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22474838016, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368169691583, + "efficiency_ratio": 12343.818, + "data_reduction": 4.9470835, + "data_physical_used": 7446348795, + "snapshot_savings": 10.074033, + "thin_savings": 459.1045, + "shared_logical_used": 36837707776, + "system_free_space": 140327617945, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91903489998848, + "logical_used": 69187022848, + "logical_used_volume": 47534018560, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22408101888, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368174539400, + "efficiency_ratio": 12342.058, + "data_reduction": 4.938109, + "data_physical_used": 7446367317, + "snapshot_savings": 10.068099, + "thin_savings": 459.66843, + "shared_logical_used": 36770971648, + "system_free_space": 140323372646, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91906711224320, + "logical_used": 69187022848, + "logical_used_volume": 47534018560, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22408101888, + "shared_logical_used_file_system": 14362865664, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368177730720, + "efficiency_ratio": 12342.48, + "data_reduction": 4.9381046, + "data_physical_used": 7446372969, + "snapshot_savings": 10.068111, + "thin_savings": 459.66843, + "shared_logical_used": 36770967552, + "system_free_space": 140320127385, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91903489998848, + "logical_used": 69187022848, + "logical_used_volume": 47534018560, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22408101888, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368178465182, + "efficiency_ratio": 12341.962, + "data_reduction": 4.9380703, + "data_physical_used": 7446425323, + "snapshot_savings": 10.068099, + "thin_savings": 459.66843, + "shared_logical_used": 36770971648, + "system_free_space": 140320220774, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91903489998848, + "logical_used": 69187022848, + "logical_used_volume": 47534018560, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22408101888, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368177839928, + "efficiency_ratio": 12341.931, + "data_reduction": 4.9380584, + "data_physical_used": 7446443354, + "snapshot_savings": 10.068099, + "thin_savings": 459.66843, + "shared_logical_used": 36770971648, + "system_free_space": 140320633241, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91903489998848, + "logical_used": 69187022848, + "logical_used_volume": 47534018560, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22408101888, + "shared_logical_used_file_system": 14362865664, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368180160696, + "efficiency_ratio": 12341.853, + "data_reduction": 4.9380264, + "data_physical_used": 7446490810, + "snapshot_savings": 10.068111, + "thin_savings": 459.66843, + "shared_logical_used": 36770967552, + "system_free_space": 140319228518, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91900268773376, + "logical_used": 69118181376, + "logical_used_volume": 47465177088, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22341365760, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368180501570, + "efficiency_ratio": 12341.426, + "data_reduction": 4.929067, + "data_physical_used": 7446487422, + "snapshot_savings": 10.062173, + "thin_savings": 460.5264, + "shared_logical_used": 36704235520, + "system_free_space": 140318516428, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:35:00Z", + "cluster_id": "0", + "logical_provisioned": 92141860683776, + "logical_used": 69128286208, + "logical_used_volume": 47475281920, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22347259904, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368145905892, + "efficiency_ratio": 12373.854, + "data_reduction": 4.9298525, + "data_physical_used": 7446496643, + "snapshot_savings": 10.074033, + "thin_savings": 467.67657, + "shared_logical_used": 36710129664, + "system_free_space": 140316932710, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:40:00Z", + "cluster_id": "0", + "logical_provisioned": 92145081909248, + "logical_used": 69241122816, + "logical_used_volume": 47588118528, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22462201856, + "shared_logical_used_file_system": 14362865664, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368154732810, + "efficiency_ratio": 12373.911, + "data_reduction": 4.9451375, + "data_physical_used": 7446722689, + "snapshot_savings": 10.068111, + "thin_savings": 466.08948, + "shared_logical_used": 36825067520, + "system_free_space": 140305671577, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91922817351680, + "logical_used": 69190463488, + "logical_used_volume": 47537459200, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22411542528, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368155105051, + "efficiency_ratio": 12344.429, + "data_reduction": 4.9384813, + "data_physical_used": 7446502371, + "snapshot_savings": 10.068099, + "thin_savings": 460.20294, + "shared_logical_used": 36774412288, + "system_free_space": 140307718348, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91913153675264, + "logical_used": 69259231232, + "logical_used_volume": 47606226944, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22480310272, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368161507774, + "efficiency_ratio": 12343.046, + "data_reduction": 4.947682, + "data_physical_used": 7446554299, + "snapshot_savings": 10.068099, + "thin_savings": 458.96118, + "shared_logical_used": 36843180032, + "system_free_space": 140301807616, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T05:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91913153675264, + "logical_used": 69259231232, + "logical_used_volume": 47606226944, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22480310272, + "shared_logical_used_file_system": 14362865664, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368163117317, + "efficiency_ratio": 12342.907, + "data_reduction": 4.9476256, + "data_physical_used": 7446637765, + "snapshot_savings": 10.068111, + "thin_savings": 458.96118, + "shared_logical_used": 36843175936, + "system_free_space": 140300321177, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91906711224320, + "logical_used": 69255864320, + "logical_used_volume": 47602860032, + "logical_used_file_system": 21653004288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22476943360, + "shared_logical_used_file_system": 14362869760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368164038746, + "efficiency_ratio": 12341.99, + "data_reduction": 4.9471536, + "data_physical_used": 7446668975, + "snapshot_savings": 10.068099, + "thin_savings": 458.81396, + "shared_logical_used": 36839813120, + "system_free_space": 140299469004, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91906711224320, + "logical_used": 69255888896, + "logical_used_volume": 47602860032, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22476943360, + "shared_logical_used_file_system": 14362894336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368166139306, + "efficiency_ratio": 12342.007, + "data_reduction": 4.9471636, + "data_physical_used": 7446658310, + "snapshot_savings": 10.068099, + "thin_savings": 458.81363, + "shared_logical_used": 36839837696, + "system_free_space": 140298212147, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91909932449792, + "logical_used": 69255888896, + "logical_used_volume": 47602860032, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22476943360, + "shared_logical_used_file_system": 14362890240, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368168275932, + "efficiency_ratio": 12342.41, + "data_reduction": 4.947151, + "data_physical_used": 7446676302, + "snapshot_savings": 10.068111, + "thin_savings": 458.81363, + "shared_logical_used": 36839833600, + "system_free_space": 140295445504, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91938923479040, + "logical_used": 69600096256, + "logical_used_volume": 47947067392, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22821150720, + "shared_logical_used_file_system": 14362894336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368170856414, + "efficiency_ratio": 12346.2, + "data_reduction": 4.993333, + "data_physical_used": 7446738579, + "snapshot_savings": 10.068099, + "thin_savings": 455.07318, + "shared_logical_used": 37184045056, + "system_free_space": 140292678860, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91906711224320, + "logical_used": 69255888896, + "logical_used_volume": 47602860032, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22476943360, + "shared_logical_used_file_system": 14362894336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368174592503, + "efficiency_ratio": 12341.916, + "data_reduction": 4.9471273, + "data_physical_used": 7446713195, + "snapshot_savings": 10.068099, + "thin_savings": 458.81363, + "shared_logical_used": 36839837696, + "system_free_space": 140289324646, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91987241861120, + "logical_used": 70013145088, + "logical_used_volume": 48360116224, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 23234199552, + "shared_logical_used_file_system": 14362890240, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368143919552, + "efficiency_ratio": 12352.64, + "data_reduction": 5.0487795, + "data_physical_used": 7446768135, + "snapshot_savings": 10.068111, + "thin_savings": 450.96854, + "shared_logical_used": 37597089792, + "system_free_space": 140282861363, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91987241861120, + "logical_used": 70770397184, + "logical_used_volume": 49117368320, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 23989346304, + "shared_logical_used_file_system": 14362894336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368150315261, + "efficiency_ratio": 12352.582, + "data_reduction": 5.1501617, + "data_physical_used": 7446802819, + "snapshot_savings": 10.074033, + "thin_savings": 441.14966, + "shared_logical_used": 38352240640, + "system_free_space": 140279946854, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:35:00Z", + "cluster_id": "0", + "logical_provisioned": 92067772497920, + "logical_used": 69600092160, + "logical_used_volume": 47947063296, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22821146624, + "shared_logical_used_file_system": 14362894336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368130093950, + "efficiency_ratio": 12363.455, + "data_reduction": 4.993313, + "data_physical_used": 7446767645, + "snapshot_savings": 10.068099, + "thin_savings": 458.90695, + "shared_logical_used": 37184040960, + "system_free_space": 140300667494, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:40:00Z", + "cluster_id": "0", + "logical_provisioned": 92061330046976, + "logical_used": 70357352448, + "logical_used_volume": 48704323584, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 23509565440, + "shared_logical_used_file_system": 14362890240, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368139217378, + "efficiency_ratio": 12362.499, + "data_reduction": 5.08572, + "data_physical_used": 7446822369, + "snapshot_savings": 10.087369, + "thin_savings": 449.508, + "shared_logical_used": 37872455680, + "system_free_space": 140292585472, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:45:00Z", + "cluster_id": "0", + "logical_provisioned": 92061330046976, + "logical_used": 71183450112, + "logical_used_volume": 49530421248, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 24404504576, + "shared_logical_used_file_system": 14362890240, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368146757964, + "efficiency_ratio": 12362.353, + "data_reduction": 5.205836, + "data_physical_used": 7446910590, + "snapshot_savings": 10.068111, + "thin_savings": 438.07715, + "shared_logical_used": 38767394816, + "system_free_space": 140285954867, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:50:00Z", + "cluster_id": "0", + "logical_provisioned": 92063477530624, + "logical_used": 72107651072, + "logical_used_volume": 50454622208, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 25328705536, + "shared_logical_used_file_system": 14362894336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368156353827, + "efficiency_ratio": 12362.5625, + "data_reduction": 5.3299084, + "data_physical_used": 7446957527, + "snapshot_savings": 10.068099, + "thin_savings": 426.92657, + "shared_logical_used": 39691599872, + "system_free_space": 140276973977, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T06:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91902416257024, + "logical_used": 69147471872, + "logical_used_volume": 47494443008, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22366420992, + "shared_logical_used_file_system": 14362890240, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368161178952, + "efficiency_ratio": 12341.031, + "data_reduction": 4.932162, + "data_physical_used": 7446899091, + "snapshot_savings": 10.074044, + "thin_savings": 460.18436, + "shared_logical_used": 36729311232, + "system_free_space": 140272931020, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:00:00Z", + "cluster_id": "0", + "logical_provisioned": 92144008167424, + "logical_used": 69299822592, + "logical_used_volume": 47646793728, + "logical_used_file_system": 21653028864, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22491742208, + "shared_logical_used_file_system": 14362894336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368171842103, + "efficiency_ratio": 12373.169, + "data_reduction": 4.948869, + "data_physical_used": 7447082594, + "snapshot_savings": 10.070908, + "thin_savings": 465.7694, + "shared_logical_used": 36854636544, + "system_free_space": 140266424934, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:05:00Z", + "cluster_id": "0", + "logical_provisioned": 92224538804224, + "logical_used": 69224849408, + "logical_used_volume": 47571783680, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22441050112, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368176728774, + "efficiency_ratio": 12383.941, + "data_reduction": 4.942051, + "data_physical_used": 7447106830, + "snapshot_savings": 10.081684, + "thin_savings": 468.80545, + "shared_logical_used": 36803981312, + "system_free_space": 140261985075, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91905637482496, + "logical_used": 69147508736, + "logical_used_volume": 47494443008, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22368526336, + "shared_logical_used_file_system": 14362927104, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368181567370, + "efficiency_ratio": 12341.275, + "data_reduction": 4.932374, + "data_physical_used": 7447013507, + "snapshot_savings": 10.068111, + "thin_savings": 460.18384, + "shared_logical_used": 36731453440, + "system_free_space": 140258490777, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91902416257024, + "logical_used": 69147508736, + "logical_used_volume": 47494443008, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22368526336, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368144613667, + "efficiency_ratio": 12340.817, + "data_reduction": 4.9323645, + "data_physical_used": 7447028306, + "snapshot_savings": 10.068099, + "thin_savings": 460.18384, + "shared_logical_used": 36731457536, + "system_free_space": 140258187264, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91902416257024, + "logical_used": 69148557312, + "logical_used_volume": 47495491584, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22369574912, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368144135877, + "efficiency_ratio": 12340.695, + "data_reduction": 4.9324565, + "data_physical_used": 7447102030, + "snapshot_savings": 10.068099, + "thin_savings": 460.16928, + "shared_logical_used": 36732506112, + "system_free_space": 140257346764, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91902416257024, + "logical_used": 69148557312, + "logical_used_volume": 47495491584, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22367469568, + "shared_logical_used_file_system": 14362927104, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368144879573, + "efficiency_ratio": 12340.68, + "data_reduction": 4.9321666, + "data_physical_used": 7447111553, + "snapshot_savings": 10.074044, + "thin_savings": 460.16928, + "shared_logical_used": 36730396672, + "system_free_space": 140256008192, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91902416257024, + "logical_used": 69148557312, + "logical_used_volume": 47495491584, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 22369574912, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 368146587747, + "efficiency_ratio": 12340.527, + "data_reduction": 4.9323893, + "data_physical_used": 7447203205, + "snapshot_savings": 10.068099, + "thin_savings": 460.16928, + "shared_logical_used": 36732506112, + "system_free_space": 140254163763, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91797189558272, + "logical_used": 67769225216, + "logical_used_volume": 46116159488, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 21473198080, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 367878444333, + "efficiency_ratio": 12785.8955, + "data_reduction": 4.9914055, + "data_physical_used": 7179566371, + "snapshot_savings": 9.452273, + "thin_savings": 473.34198, + "shared_logical_used": 35836129280, + "system_free_space": 140254965350, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91575998742528, + "logical_used": 64727523328, + "logical_used_volume": 43074457600, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 18513879040, + "shared_logical_used_file_system": 14362927104, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 367203881526, + "efficiency_ratio": 14070.879, + "data_reduction": 5.051603, + "data_physical_used": 6508193283, + "snapshot_savings": 11.488635, + "thin_savings": 502.19165, + "shared_logical_used": 32876806144, + "system_free_space": 140258525798, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 59746930688, + "logical_used_volume": 38093864960, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13563117568, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365985891398, + "efficiency_ratio": 17202.197, + "data_reduction": 5.266672, + "data_physical_used": 5302408847, + "snapshot_savings": 14.749792, + "thin_savings": 572.1041, + "shared_logical_used": 27926048768, + "system_free_space": 140270755840, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91121805950976, + "logical_used": 59366010880, + "logical_used_volume": 37712945152, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13182197760, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365988031896, + "efficiency_ratio": 17185.04, + "data_reduction": 5.19485, + "data_physical_used": 5302392004, + "snapshot_savings": 14.749792, + "thin_savings": 577.9752, + "shared_logical_used": 27545128960, + "system_free_space": 140269211033, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T07:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91039127830528, + "logical_used": 58794541056, + "logical_used_volume": 37141475328, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12616937472, + "shared_logical_used_file_system": 14362927104, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365854185689, + "efficiency_ratio": 17615.115, + "data_reduction": 5.2203207, + "data_physical_used": 5168238892, + "snapshot_savings": 16.103075, + "thin_savings": 583.9509, + "shared_logical_used": 26979864576, + "system_free_space": 140268763545, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91087446212608, + "logical_used": 58801233920, + "logical_used_volume": 37148168192, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12623630336, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365855733729, + "efficiency_ratio": 17623.926, + "data_reduction": 5.2214565, + "data_physical_used": 5168397434, + "snapshot_savings": 16.103045, + "thin_savings": 585.7359, + "shared_logical_used": 26986561536, + "system_free_space": 140267393843, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91103552339968, + "logical_used": 59207589888, + "logical_used_volume": 37554524160, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13029986304, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365827261848, + "efficiency_ratio": 17627.115, + "data_reduction": 5.3001018, + "data_physical_used": 5168375931, + "snapshot_savings": 16.103045, + "thin_savings": 576.95996, + "shared_logical_used": 27392917504, + "system_free_space": 140258953830, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91074561310720, + "logical_used": 59069906944, + "logical_used_volume": 37416841216, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12826828800, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365837607100, + "efficiency_ratio": 17621.414, + "data_reduction": 5.260767, + "data_physical_used": 5168402626, + "snapshot_savings": 16.109976, + "thin_savings": 580.4267, + "shared_logical_used": 27189760000, + "system_free_space": 140270798643, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91103552339968, + "logical_used": 59207589888, + "logical_used_volume": 37554524160, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13029986304, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365842908117, + "efficiency_ratio": 17626.904, + "data_reduction": 5.3000383, + "data_physical_used": 5168437630, + "snapshot_savings": 16.103045, + "thin_savings": 576.95996, + "shared_logical_used": 27392917504, + "system_free_space": 140266136985, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91071340085248, + "logical_used": 59007795200, + "logical_used_volume": 37354729472, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12831875072, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365853119150, + "efficiency_ratio": 17620.533, + "data_reduction": 5.261666, + "data_physical_used": 5168478406, + "snapshot_savings": 16.04214, + "thin_savings": 580.42676, + "shared_logical_used": 27194806272, + "system_free_space": 140256817561, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91103552339968, + "logical_used": 59348627456, + "logical_used_volume": 37695561728, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13168918528, + "shared_logical_used_file_system": 14362927104, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365861479450, + "efficiency_ratio": 17626.66, + "data_reduction": 5.326845, + "data_physical_used": 5168508770, + "snapshot_savings": 16.119186, + "thin_savings": 573.75977, + "shared_logical_used": 27531845632, + "system_free_space": 140249202483, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91090667438080, + "logical_used": 59142643712, + "logical_used_volume": 37489577984, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12965040128, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365869715264, + "efficiency_ratio": 17624.158, + "data_reduction": 5.2873964, + "data_physical_used": 5168511920, + "snapshot_savings": 16.103045, + "thin_savings": 577.9348, + "shared_logical_used": 27327971328, + "system_free_space": 140241486233, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91090667438080, + "logical_used": 58871787520, + "logical_used_volume": 37218721792, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12694183936, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365877240811, + "efficiency_ratio": 17624.027, + "data_reduction": 5.234953, + "data_physical_used": 5168549681, + "snapshot_savings": 16.103045, + "thin_savings": 584.2087, + "shared_logical_used": 27057115136, + "system_free_space": 140234147430, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91093888663552, + "logical_used": 59620638720, + "logical_used_volume": 37967572992, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13374193664, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365885980158, + "efficiency_ratio": 17624.475, + "data_reduction": 5.366466, + "data_physical_used": 5168601474, + "snapshot_savings": 16.135725, + "thin_savings": 568.709, + "shared_logical_used": 27737124864, + "system_free_space": 140225894195, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91090667438080, + "logical_used": 59207589888, + "logical_used_volume": 37554524160, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13038411776, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365892978009, + "efficiency_ratio": 17623.852, + "data_reduction": 5.3015003, + "data_physical_used": 5168601625, + "snapshot_savings": 16.038893, + "thin_savings": 576.45044, + "shared_logical_used": 27401342976, + "system_free_space": 140218465894, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91106773565440, + "logical_used": 59491373056, + "logical_used_volume": 37838307328, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13313769472, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365900043663, + "efficiency_ratio": 17626.658, + "data_reduction": 5.354681, + "data_physical_used": 5168692943, + "snapshot_savings": 16.103045, + "thin_savings": 570.68274, + "shared_logical_used": 27676700672, + "system_free_space": 140211870310, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T08:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91087446212608, + "logical_used": 59082158080, + "logical_used_volume": 37429092352, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12904554496, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365871036221, + "efficiency_ratio": 17622.871, + "data_reduction": 5.275495, + "data_physical_used": 5168706689, + "snapshot_savings": 16.103045, + "thin_savings": 579.1961, + "shared_logical_used": 27267485696, + "system_free_space": 140204212428, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91093888663552, + "logical_used": 58933903360, + "logical_used_volume": 37280837632, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12756299776, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365878205379, + "efficiency_ratio": 17624.18, + "data_reduction": 5.2468305, + "data_physical_used": 5168687977, + "snapshot_savings": 16.103045, + "thin_savings": 582.88666, + "shared_logical_used": 27119230976, + "system_free_space": 140196986470, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91093888663552, + "logical_used": 59482951680, + "logical_used_volume": 37829885952, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13305348096, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365886806842, + "efficiency_ratio": 17623.898, + "data_reduction": 5.352971, + "data_physical_used": 5168770389, + "snapshot_savings": 16.103045, + "thin_savings": 570.3667, + "shared_logical_used": 27668279296, + "system_free_space": 140188830515, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91100331114496, + "logical_used": 59147165696, + "logical_used_volume": 37494099968, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12900720640, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365893983316, + "efficiency_ratio": 17625.152, + "data_reduction": 5.27469, + "data_physical_used": 5168768262, + "snapshot_savings": 16.135725, + "thin_savings": 579.6685, + "shared_logical_used": 27263651840, + "system_free_space": 140183682457, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91097109889024, + "logical_used": 59486396416, + "logical_used_volume": 37833330688, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13308792832, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365901888822, + "efficiency_ratio": 17624.441, + "data_reduction": 5.353613, + "data_physical_used": 5168794183, + "snapshot_savings": 16.078943, + "thin_savings": 570.49097, + "shared_logical_used": 27671724032, + "system_free_space": 140176102400, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91100331114496, + "logical_used": 59078324224, + "logical_used_volume": 37425258496, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12900720640, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365907564821, + "efficiency_ratio": 17625.057, + "data_reduction": 5.2746615, + "data_physical_used": 5168796453, + "snapshot_savings": 16.103045, + "thin_savings": 579.7966, + "shared_logical_used": 27263651840, + "system_free_space": 140170880409, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91097109889024, + "logical_used": 59419164672, + "logical_used_volume": 37766098944, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13241561088, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365916528170, + "efficiency_ratio": 17624.133, + "data_reduction": 5.3405123, + "data_physical_used": 5168884853, + "snapshot_savings": 16.066921, + "thin_savings": 572.0332, + "shared_logical_used": 27604492288, + "system_free_space": 140169191628, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91103552339968, + "logical_used": 59138748416, + "logical_used_volume": 37485682688, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 12961144832, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365922599563, + "efficiency_ratio": 17625.32, + "data_reduction": 5.2862434, + "data_physical_used": 5168902307, + "snapshot_savings": 16.103045, + "thin_savings": 578.53503, + "shared_logical_used": 27324076032, + "system_free_space": 140162895667, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91119658467328, + "logical_used": 59491373056, + "logical_used_volume": 37838307328, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13313769472, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365908223007, + "efficiency_ratio": 17628.18, + "data_reduction": 5.354386, + "data_physical_used": 5168977215, + "snapshot_savings": 16.103045, + "thin_savings": 571.18665, + "shared_logical_used": 27676700672, + "system_free_space": 140177810636, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91093888663552, + "logical_used": 59345272832, + "logical_used_volume": 37692207104, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13098827776, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365912124682, + "efficiency_ratio": 17623.223, + "data_reduction": 5.312812, + "data_physical_used": 5168968687, + "snapshot_savings": 16.135725, + "thin_savings": 574.8853, + "shared_logical_used": 27461758976, + "system_free_space": 140182293299, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91122879692800, + "logical_used": 59697905664, + "logical_used_volume": 38044839936, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13520302080, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365859135273, + "efficiency_ratio": 17628.639, + "data_reduction": 5.394292, + "data_physical_used": 5169025746, + "snapshot_savings": 16.103045, + "thin_savings": 566.73505, + "shared_logical_used": 27883233280, + "system_free_space": 140198079897, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91090667438080, + "logical_used": 59414114304, + "logical_used_volume": 37761048576, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13236510720, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365846719338, + "efficiency_ratio": 17622.467, + "data_reduction": 5.339408, + "data_physical_used": 5169008273, + "snapshot_savings": 16.103045, + "thin_savings": 571.78046, + "shared_logical_used": 27599441920, + "system_free_space": 140210216550, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T09:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 59906461696, + "logical_used_volume": 38253395968, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13728866304, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365843414730, + "efficiency_ratio": 17629.068, + "data_reduction": 5.4345813, + "data_physical_used": 5169082589, + "snapshot_savings": 16.087961, + "thin_savings": 562.35583, + "shared_logical_used": 28091797504, + "system_free_space": 140213726412, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 59563958272, + "logical_used_volume": 37910892544, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13386362880, + "shared_logical_used_file_system": 14362927104, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365841702480, + "efficiency_ratio": 17628.887, + "data_reduction": 5.368265, + "data_physical_used": 5169135399, + "snapshot_savings": 16.087992, + "thin_savings": 569.8677, + "shared_logical_used": 27749289984, + "system_free_space": 140216138956, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91093888663552, + "logical_used": 59213041664, + "logical_used_volume": 37559975936, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13035446272, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365842379235, + "efficiency_ratio": 17622.705, + "data_reduction": 5.300394, + "data_physical_used": 5169120534, + "snapshot_savings": 16.087961, + "thin_savings": 576.50134, + "shared_logical_used": 27398377472, + "system_free_space": 140216189542, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 59565662208, + "logical_used_volume": 37912596480, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13388066816, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365847322153, + "efficiency_ratio": 17628.69, + "data_reduction": 5.3685355, + "data_physical_used": 5169193303, + "snapshot_savings": 16.087961, + "thin_savings": 569.8298, + "shared_logical_used": 27750998016, + "system_free_space": 140212621312, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91103552339968, + "logical_used": 59417894912, + "logical_used_volume": 37764829184, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13240299520, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365845000988, + "efficiency_ratio": 17624.182, + "data_reduction": 5.3399053, + "data_physical_used": 5169236058, + "snapshot_savings": 16.087961, + "thin_savings": 572.2481, + "shared_logical_used": 27603230720, + "system_free_space": 140222730649, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91135764594688, + "logical_used": 59770458112, + "logical_used_volume": 38117392384, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13592862720, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365844144006, + "efficiency_ratio": 17630.047, + "data_reduction": 5.407997, + "data_physical_used": 5169343501, + "snapshot_savings": 16.087961, + "thin_savings": 565.6887, + "shared_logical_used": 27955793920, + "system_free_space": 140223563366, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91135764594688, + "logical_used": 60428009472, + "logical_used_volume": 38461648896, + "logical_used_file_system": 21966360576, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13937119232, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365846290337, + "efficiency_ratio": 17630.166, + "data_reduction": 5.4746294, + "data_physical_used": 5169308912, + "snapshot_savings": 16.23654, + "thin_savings": 558.2534, + "shared_logical_used": 28300050432, + "system_free_space": 140221633331, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91119658467328, + "logical_used": 59762102272, + "logical_used_volume": 38109036544, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13586612224, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365843875470, + "efficiency_ratio": 17626.805, + "data_reduction": 5.4067492, + "data_physical_used": 5169380108, + "snapshot_savings": 16.071913, + "thin_savings": 565.24835, + "shared_logical_used": 27949543424, + "system_free_space": 140224256000, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91119658467328, + "logical_used": 59419574272, + "logical_used_volume": 37766508544, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13241978880, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365806698576, + "efficiency_ratio": 17626.854, + "data_reduction": 5.340096, + "data_physical_used": 5169366233, + "snapshot_savings": 16.087961, + "thin_savings": 572.8421, + "shared_logical_used": 27604910080, + "system_free_space": 140225256038, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91138985820160, + "logical_used": 60079820800, + "logical_used_volume": 38113460224, + "logical_used_file_system": 21966360576, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13588930560, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365805226080, + "efficiency_ratio": 17630.29, + "data_reduction": 5.4071198, + "data_physical_used": 5169455220, + "snapshot_savings": 16.23654, + "thin_savings": 565.7748, + "shared_logical_used": 27951861760, + "system_free_space": 140226917580, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91122879692800, + "logical_used": 59489476608, + "logical_used_volume": 37836410880, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13311881216, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365802435777, + "efficiency_ratio": 17627.236, + "data_reduction": 5.353545, + "data_physical_used": 5169436429, + "snapshot_savings": 16.087961, + "thin_savings": 571.40186, + "shared_logical_used": 27674812416, + "system_free_space": 140229298995, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91138985820160, + "logical_used": 59840954368, + "logical_used_volume": 38187888640, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13663358976, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365795460767, + "efficiency_ratio": 17630.1, + "data_reduction": 5.421459, + "data_physical_used": 5169510603, + "snapshot_savings": 16.087961, + "thin_savings": 564.27435, + "shared_logical_used": 28026290176, + "system_free_space": 140237283737, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T10:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91122879692800, + "logical_used": 59801088000, + "logical_used_volume": 37834727424, + "logical_used_file_system": 21966360576, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13309767680, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365792576948, + "efficiency_ratio": 17626.998, + "data_reduction": 5.3530636, + "data_physical_used": 5169506989, + "snapshot_savings": 16.239851, + "thin_savings": 571.4395, + "shared_logical_used": 27672698880, + "system_free_space": 140240567910, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91122879692800, + "logical_used": 59837042688, + "logical_used_volume": 38183976960, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13659443200, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365796205224, + "efficiency_ratio": 17626.893, + "data_reduction": 5.4206734, + "data_physical_used": 5169537712, + "snapshot_savings": 16.087992, + "thin_savings": 563.738, + "shared_logical_used": 28022374400, + "system_free_space": 140252253184, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91122879692800, + "logical_used": 59491131392, + "logical_used_volume": 37838065664, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13313536000, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365797490798, + "efficiency_ratio": 17626.941, + "data_reduction": 5.3537755, + "data_physical_used": 5169523246, + "snapshot_savings": 16.075983, + "thin_savings": 571.40234, + "shared_logical_used": 27676467200, + "system_free_space": 140251677286, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91142207045632, + "logical_used": 60291387392, + "logical_used_volume": 38325026816, + "logical_used_file_system": 21966360576, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13731655680, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365800048505, + "efficiency_ratio": 17630.592, + "data_reduction": 5.43463, + "data_physical_used": 5169549140, + "snapshot_savings": 16.269188, + "thin_savings": 562.7913, + "shared_logical_used": 28094586880, + "system_free_space": 140249303654, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 59625467904, + "logical_used_volume": 37972402176, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13447872512, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365802891813, + "efficiency_ratio": 17627.438, + "data_reduction": 5.379723, + "data_physical_used": 5169560579, + "snapshot_savings": 16.087961, + "thin_savings": 568.5039, + "shared_logical_used": 27810803712, + "system_free_space": 140246684876, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91142207045632, + "logical_used": 60246720512, + "logical_used_volume": 38593654784, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14069125120, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365811796157, + "efficiency_ratio": 17630.531, + "data_reduction": 5.4998918, + "data_physical_used": 5169566504, + "snapshot_savings": 16.087961, + "thin_savings": 555.6986, + "shared_logical_used": 28432056320, + "system_free_space": 140250611097, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 59840409600, + "logical_used_volume": 38187343872, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13662814208, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365775236864, + "efficiency_ratio": 17627.342, + "data_reduction": 5.421272, + "data_physical_used": 5169588561, + "snapshot_savings": 16.087961, + "thin_savings": 563.78906, + "shared_logical_used": 28025745408, + "system_free_space": 140254113177, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 60176179200, + "logical_used_volume": 38523113472, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13998583808, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365769318138, + "efficiency_ratio": 17627.068, + "data_reduction": 5.486138, + "data_physical_used": 5169668408, + "snapshot_savings": 16.087961, + "thin_savings": 556.5783, + "shared_logical_used": 28361515008, + "system_free_space": 140259876044, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91129322143744, + "logical_used": 59633868800, + "logical_used_volume": 37980803072, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13456273408, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365775515428, + "efficiency_ratio": 17627.639, + "data_reduction": 5.3812194, + "data_physical_used": 5169684213, + "snapshot_savings": 16.087961, + "thin_savings": 568.4434, + "shared_logical_used": 27819204608, + "system_free_space": 140258179481, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91129322143744, + "logical_used": 60179566592, + "logical_used_volume": 38526500864, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13933129728, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365785780536, + "efficiency_ratio": 17627.285, + "data_reduction": 5.4733505, + "data_physical_used": 5169788050, + "snapshot_savings": 16.096502, + "thin_savings": 558.0412, + "shared_logical_used": 28296060928, + "system_free_space": 140248412569, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91142207045632, + "logical_used": 60253409280, + "logical_used_volume": 38600343552, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14075813888, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365791392198, + "efficiency_ratio": 17629.59, + "data_reduction": 5.5008917, + "data_physical_used": 5169842584, + "snapshot_savings": 16.087961, + "thin_savings": 555.55743, + "shared_logical_used": 28438745088, + "system_free_space": 140242933760, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 60245041152, + "logical_used_volume": 38591975424, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14067445760, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365796708491, + "efficiency_ratio": 17626.506, + "data_reduction": 5.499283, + "data_physical_used": 5169833549, + "snapshot_savings": 16.087961, + "thin_savings": 555.1222, + "shared_logical_used": 28430376960, + "system_free_space": 140238602854, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T11:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 60245041152, + "logical_used_volume": 38591975424, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14065340416, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365801452702, + "efficiency_ratio": 17626.164, + "data_reduction": 5.498769, + "data_physical_used": 5169933856, + "snapshot_savings": 16.10404, + "thin_savings": 555.1222, + "shared_logical_used": 28428271616, + "system_free_space": 140233968435, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 60246724608, + "logical_used_volume": 38593658880, + "logical_used_file_system": 21653065728, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14069129216, + "shared_logical_used_file_system": 14362931200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365806593370, + "efficiency_ratio": 17626.275, + "data_reduction": 5.4995365, + "data_physical_used": 5169900981, + "snapshot_savings": 16.075924, + "thin_savings": 555.1222, + "shared_logical_used": 28432060416, + "system_free_space": 140229302886, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91126100918272, + "logical_used": 60245065728, + "logical_used_volume": 38591975424, + "logical_used_file_system": 21653090304, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14075850752, + "shared_logical_used_file_system": 14362955776, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365815070191, + "efficiency_ratio": 17625.807, + "data_reduction": 5.500695, + "data_physical_used": 5170038538, + "snapshot_savings": 16.024088, + "thin_savings": 555.12164, + "shared_logical_used": 28438806528, + "system_free_space": 140225866956, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91132543369216, + "logical_used": 59627163648, + "logical_used_volume": 37974073344, + "logical_used_file_system": 21653090304, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13451227136, + "shared_logical_used_file_system": 14362955776, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365814669191, + "efficiency_ratio": 17627.36, + "data_reduction": 5.379973, + "data_physical_used": 5169948525, + "snapshot_savings": 16.075127, + "thin_savings": 568.5917, + "shared_logical_used": 27814182912, + "system_free_space": 140218512588, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91145428271104, + "logical_used": 60109586432, + "logical_used_volume": 38454366208, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13929836544, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365785189761, + "efficiency_ratio": 17629.742, + "data_reduction": 5.4729686, + "data_physical_used": 5169980766, + "snapshot_savings": 16.086273, + "thin_savings": 558.73175, + "shared_logical_used": 28295143424, + "system_free_space": 140210835251, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91113216016384, + "logical_used": 59695394816, + "logical_used_volume": 38040174592, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13515644928, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365789983934, + "efficiency_ratio": 17623.383, + "data_reduction": 5.392814, + "data_physical_used": 5170018952, + "snapshot_savings": 16.086273, + "thin_savings": 566.4614, + "shared_logical_used": 27880951808, + "system_free_space": 140204060672, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91119658467328, + "logical_used": 59973513216, + "logical_used_volume": 38318292992, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13793763328, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365798972149, + "efficiency_ratio": 17624.516, + "data_reduction": 5.4465737, + "data_physical_used": 5170052340, + "snapshot_savings": 16.086273, + "thin_savings": 560.6611, + "shared_logical_used": 28159070208, + "system_free_space": 140197379481, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91129322143744, + "logical_used": 59632656384, + "logical_used_volume": 37977436160, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13450801152, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365804126745, + "efficiency_ratio": 17626.318, + "data_reduction": 5.380217, + "data_physical_used": 5170071717, + "snapshot_savings": 16.086334, + "thin_savings": 568.51965, + "shared_logical_used": 27816108032, + "system_free_space": 140193017446, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91113216016384, + "logical_used": 60042768384, + "logical_used_volume": 38387548160, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13863018496, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365808836675, + "efficiency_ratio": 17623.18, + "data_reduction": 5.459942, + "data_physical_used": 5170078160, + "snapshot_savings": 16.071285, + "thin_savings": 558.9727, + "shared_logical_used": 28228325376, + "system_free_space": 140192110796, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91100331114496, + "logical_used": 59629719552, + "logical_used_volume": 37974499328, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13449969664, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365798341573, + "efficiency_ratio": 17620.58, + "data_reduction": 5.3800163, + "data_physical_used": 5170110149, + "snapshot_savings": 16.071285, + "thin_savings": 567.32837, + "shared_logical_used": 27815276544, + "system_free_space": 140203196825, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91113216016384, + "logical_used": 59973926912, + "logical_used_volume": 38318706688, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13794177024, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365801064472, + "efficiency_ratio": 17622.973, + "data_reduction": 5.4465623, + "data_physical_used": 5170138924, + "snapshot_savings": 16.071285, + "thin_savings": 560.44995, + "shared_logical_used": 28159483904, + "system_free_space": 140200527462, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91103552339968, + "logical_used": 59767402496, + "logical_used_volume": 38112182272, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13587652608, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365806260026, + "efficiency_ratio": 17621.092, + "data_reduction": 5.4066133, + "data_physical_used": 5170142165, + "snapshot_savings": 16.071285, + "thin_savings": 564.555, + "shared_logical_used": 27952959488, + "system_free_space": 140196301619, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T12:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91119658467328, + "logical_used": 60111609856, + "logical_used_volume": 38456389632, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13929754624, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365810563302, + "efficiency_ratio": 17624.174, + "data_reduction": 5.472771, + "data_physical_used": 5170152254, + "snapshot_savings": 16.08733, + "thin_savings": 557.7492, + "shared_logical_used": 28295061504, + "system_free_space": 140192340377, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91119658467328, + "logical_used": 60455809024, + "logical_used_volume": 38800588800, + "logical_used_file_system": 21655220224, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14276067328, + "shared_logical_used_file_system": 14365306880, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365815666359, + "efficiency_ratio": 17624.115, + "data_reduction": 5.5397363, + "data_physical_used": 5170169204, + "snapshot_savings": 16.071222, + "thin_savings": 550.5131, + "shared_logical_used": 28641374208, + "system_free_space": 140187709849, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91155091947520, + "logical_used": 60182159360, + "logical_used_volume": 38526910464, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14002380800, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365786250469, + "efficiency_ratio": 17630.63, + "data_reduction": 5.4867005, + "data_physical_used": 5170268873, + "snapshot_savings": 16.071285, + "thin_savings": 557.6001, + "shared_logical_used": 28367716352, + "system_free_space": 140180865228, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91142207045632, + "logical_used": 59906805760, + "logical_used_volume": 38251556864, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13658185728, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365795001731, + "efficiency_ratio": 17628.193, + "data_reduction": 5.420146, + "data_physical_used": 5170252044, + "snapshot_savings": 16.103897, + "thin_savings": 564.38513, + "shared_logical_used": 28023521280, + "system_free_space": 140179635609, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91155091947520, + "logical_used": 60182151168, + "logical_used_volume": 38526902272, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14002372608, + "shared_logical_used_file_system": 14365331456, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365805781755, + "efficiency_ratio": 17630.602, + "data_reduction": 5.4866896, + "data_physical_used": 5170276768, + "snapshot_savings": 16.071318, + "thin_savings": 557.6003, + "shared_logical_used": 28367704064, + "system_free_space": 140168868659, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91135764594688, + "logical_used": 60839665664, + "logical_used_volume": 38871121920, + "logical_used_file_system": 21968543744, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14346592256, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365813011467, + "efficiency_ratio": 17626.729, + "data_reduction": 5.553224, + "data_physical_used": 5170316970, + "snapshot_savings": 16.219702, + "thin_savings": 549.6583, + "shared_logical_used": 28711927808, + "system_free_space": 140161907302, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91145428271104, + "logical_used": 60188971008, + "logical_used_volume": 38533722112, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14007087104, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365820354615, + "efficiency_ratio": 17628.334, + "data_reduction": 5.487478, + "data_physical_used": 5170393968, + "snapshot_savings": 16.08733, + "thin_savings": 557.0875, + "shared_logical_used": 28372422656, + "system_free_space": 140157720371, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91161534398464, + "logical_used": 60670775296, + "logical_used_volume": 39015526400, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14490996736, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365829742392, + "efficiency_ratio": 17631.34, + "data_reduction": 5.581036, + "data_physical_used": 5170425978, + "snapshot_savings": 16.071285, + "thin_savings": 547.6541, + "shared_logical_used": 28856332288, + "system_free_space": 140147377561, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91116437241856, + "logical_used": 60318158848, + "logical_used_volume": 38662909952, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14138380288, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365833216343, + "efficiency_ratio": 17622.566, + "data_reduction": 5.5128207, + "data_physical_used": 5170441002, + "snapshot_savings": 16.071285, + "thin_savings": 553.26227, + "shared_logical_used": 28503715840, + "system_free_space": 140143642009, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91132543369216, + "logical_used": 60455845888, + "logical_used_volume": 38800596992, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14276067328, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365832621264, + "efficiency_ratio": 17625.729, + "data_reduction": 5.5394654, + "data_physical_used": 5170427320, + "snapshot_savings": 16.071285, + "thin_savings": 550.99805, + "shared_logical_used": 28641402880, + "system_free_space": 140141132185, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91116437241856, + "logical_used": 60111638528, + "logical_used_volume": 38456389632, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13931859968, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365838627202, + "efficiency_ratio": 17622.484, + "data_reduction": 5.472853, + "data_physical_used": 5170464575, + "snapshot_savings": 16.071285, + "thin_savings": 557.6256, + "shared_logical_used": 28297195520, + "system_free_space": 140141817036, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91132543369216, + "logical_used": 60593598464, + "logical_used_volume": 38938349568, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14413819904, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365843718402, + "efficiency_ratio": 17625.39, + "data_reduction": 5.5660014, + "data_physical_used": 5170526463, + "snapshot_savings": 16.071285, + "thin_savings": 548.1519, + "shared_logical_used": 28779155456, + "system_free_space": 140136820736, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T13:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91116437241856, + "logical_used": 60180480000, + "logical_used_volume": 38525231104, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13998596096, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365805057197, + "efficiency_ratio": 17622.402, + "data_reduction": 5.485735, + "data_physical_used": 5170488827, + "snapshot_savings": 16.08733, + "thin_savings": 556.1635, + "shared_logical_used": 28363931648, + "system_free_space": 140138474496, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91132543369216, + "logical_used": 60731211776, + "logical_used_volume": 39075962880, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14555045888, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365809841450, + "efficiency_ratio": 17625.39, + "data_reduction": 5.593315, + "data_physical_used": 5170526033, + "snapshot_savings": 16.043827, + "thin_savings": 545.3378, + "shared_logical_used": 28920381440, + "system_free_space": 140133306982, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91151870722048, + "logical_used": 60319039488, + "logical_used_volume": 38663790592, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14139260928, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365813667679, + "efficiency_ratio": 17628.988, + "data_reduction": 5.5128565, + "data_physical_used": 5170567603, + "snapshot_savings": 16.071285, + "thin_savings": 554.5863, + "shared_logical_used": 28504596480, + "system_free_space": 140129614233, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91171198074880, + "logical_used": 60459220992, + "logical_used_volume": 38803972096, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14279442432, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365820516227, + "efficiency_ratio": 17632.64, + "data_reduction": 5.539941, + "data_physical_used": 5170592937, + "snapshot_savings": 16.071285, + "thin_savings": 552.26337, + "shared_logical_used": 28644777984, + "system_free_space": 140123730739, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91142207045632, + "logical_used": 60249321472, + "logical_used_volume": 38594072576, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14069542912, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365824942648, + "efficiency_ratio": 17626.727, + "data_reduction": 5.499251, + "data_physical_used": 5170682346, + "snapshot_savings": 16.071285, + "thin_savings": 555.688, + "shared_logical_used": 28434878464, + "system_free_space": 140119333683, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91174419300352, + "logical_used": 60593537024, + "logical_used_volume": 38938288128, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14413758464, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365831059229, + "efficiency_ratio": 17632.885, + "data_reduction": 5.5657983, + "data_physical_used": 5170703963, + "snapshot_savings": 16.071285, + "thin_savings": 549.72345, + "shared_logical_used": 28779094016, + "system_free_space": 140113730355, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91190525427712, + "logical_used": 60877287424, + "logical_used_volume": 39222038528, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14697508864, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365837994239, + "efficiency_ratio": 17635.893, + "data_reduction": 5.6206408, + "data_physical_used": 5170735342, + "snapshot_savings": 16.071285, + "thin_savings": 544.5335, + "shared_logical_used": 29062844416, + "system_free_space": 140106877952, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91142207045632, + "logical_used": 60455845888, + "logical_used_volume": 38800596992, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14273961984, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365842456168, + "efficiency_ratio": 17626.586, + "data_reduction": 5.5387406, + "data_physical_used": 5170724069, + "snapshot_savings": 16.08733, + "thin_savings": 551.3623, + "shared_logical_used": 28639297536, + "system_free_space": 140102333030, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91158313172992, + "logical_used": 60601946112, + "logical_used_volume": 38946697216, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14422167552, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365845009106, + "efficiency_ratio": 17629.48, + "data_reduction": 5.5673337, + "data_physical_used": 5170788220, + "snapshot_savings": 16.071285, + "thin_savings": 548.94635, + "shared_logical_used": 28787503104, + "system_free_space": 140099924377, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91145428271104, + "logical_used": 60326580224, + "logical_used_volume": 38671331328, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14077960192, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365847274931, + "efficiency_ratio": 17627.092, + "data_reduction": 5.5007977, + "data_physical_used": 5170758239, + "snapshot_savings": 16.103897, + "thin_savings": 555.5104, + "shared_logical_used": 28443295744, + "system_free_space": 140097710284, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91158313172992, + "logical_used": 60601946112, + "logical_used_volume": 38946697216, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14422167552, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365816418712, + "efficiency_ratio": 17629.357, + "data_reduction": 5.567294, + "data_physical_used": 5170824912, + "snapshot_savings": 16.071285, + "thin_savings": 548.94635, + "shared_logical_used": 28787503104, + "system_free_space": 140095414476, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91158313172992, + "logical_used": 60946153472, + "logical_used_volume": 39290904576, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14766374912, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365820119529, + "efficiency_ratio": 17629.312, + "data_reduction": 5.633847, + "data_physical_used": 5170837800, + "snapshot_savings": 16.071285, + "thin_savings": 541.95355, + "shared_logical_used": 29131710464, + "system_free_space": 140091499929, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T14:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91151870722048, + "logical_used": 60224057344, + "logical_used_volume": 39015612416, + "logical_used_file_system": 21208444928, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14491082752, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365822706496, + "efficiency_ratio": 17628.057, + "data_reduction": 5.580605, + "data_physical_used": 5170840683, + "snapshot_savings": 15.859624, + "thin_savings": 547.291, + "shared_logical_used": 28856418304, + "system_free_space": 140088931737, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91167976849408, + "logical_used": 60808470528, + "logical_used_volume": 39153221632, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14628691968, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365825493344, + "efficiency_ratio": 17631.094, + "data_reduction": 5.6071925, + "data_physical_used": 5170863503, + "snapshot_savings": 16.071285, + "thin_savings": 545.0887, + "shared_logical_used": 28994027520, + "system_free_space": 140086655385, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91151870722048, + "logical_used": 60455845888, + "logical_used_volume": 38800596992, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14276067328, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365830895753, + "efficiency_ratio": 17627.97, + "data_reduction": 5.5389953, + "data_physical_used": 5170866038, + "snapshot_savings": 16.071285, + "thin_savings": 551.7265, + "shared_logical_used": 28641402880, + "system_free_space": 140081550131, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91155091947520, + "logical_used": 60800053248, + "logical_used_volume": 39144804352, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14620274688, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365838347443, + "efficiency_ratio": 17628.574, + "data_reduction": 5.6055555, + "data_physical_used": 5170871960, + "snapshot_savings": 16.071285, + "thin_savings": 544.6601, + "shared_logical_used": 28985610240, + "system_free_space": 140074880614, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91151870722048, + "logical_used": 61006577664, + "logical_used_volume": 39351328768, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14826799104, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365840133970, + "efficiency_ratio": 17627.889, + "data_reduction": 5.6454763, + "data_physical_used": 5170889567, + "snapshot_savings": 16.071285, + "thin_savings": 540.5065, + "shared_logical_used": 29192134656, + "system_free_space": 140080553984, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91135764594688, + "logical_used": 60455845888, + "logical_used_volume": 38800596992, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14276067328, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365842050691, + "efficiency_ratio": 17624.68, + "data_reduction": 5.5389404, + "data_physical_used": 5170917527, + "snapshot_savings": 16.071285, + "thin_savings": 551.11945, + "shared_logical_used": 28641402880, + "system_free_space": 140079028633, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91151870722048, + "logical_used": 60800053248, + "logical_used_volume": 39144804352, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14620274688, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365846162679, + "efficiency_ratio": 17627.836, + "data_reduction": 5.6055193, + "data_physical_used": 5170905476, + "snapshot_savings": 16.071285, + "thin_savings": 544.6601, + "shared_logical_used": 28985610240, + "system_free_space": 140075098521, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91151870722048, + "logical_used": 61144260608, + "logical_used_volume": 39489011712, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14964482048, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365850033574, + "efficiency_ratio": 17627.662, + "data_reduction": 5.6720295, + "data_physical_used": 5170956246, + "snapshot_savings": 16.071285, + "thin_savings": 537.7724, + "shared_logical_used": 29329817600, + "system_free_space": 140071483596, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91151870722048, + "logical_used": 60800053248, + "logical_used_volume": 39144804352, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14620274688, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365817120925, + "efficiency_ratio": 17627.71, + "data_reduction": 5.6054797, + "data_physical_used": 5170941998, + "snapshot_savings": 16.071285, + "thin_savings": 544.6601, + "shared_logical_used": 28985610240, + "system_free_space": 140067417292, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91187304202240, + "logical_used": 61144260608, + "logical_used_volume": 39489011712, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14964482048, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365822166104, + "efficiency_ratio": 17634.387, + "data_reduction": 5.6719885, + "data_physical_used": 5170993910, + "snapshot_savings": 16.071285, + "thin_savings": 538.9558, + "shared_logical_used": 29329817600, + "system_free_space": 140062210867, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91167976849408, + "logical_used": 60531429376, + "logical_used_volume": 38876180480, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14351650816, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365811973164, + "efficiency_ratio": 17630.725, + "data_reduction": 5.553499, + "data_physical_used": 5170971795, + "snapshot_savings": 16.071285, + "thin_savings": 550.7645, + "shared_logical_used": 28716986368, + "system_free_space": 140072942796, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91171198074880, + "logical_used": 60805079040, + "logical_used_volume": 39149830144, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14625300480, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365820156467, + "efficiency_ratio": 17631.275, + "data_reduction": 5.606396, + "data_physical_used": 5170993298, + "snapshot_savings": 16.071285, + "thin_savings": 545.2773, + "shared_logical_used": 28990636032, + "system_free_space": 140066055372, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T15:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91180861751296, + "logical_used": 61147627520, + "logical_used_volume": 39492378624, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14967848960, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365826774202, + "efficiency_ratio": 17633.057, + "data_reduction": 5.672612, + "data_physical_used": 5171018940, + "snapshot_savings": 16.071285, + "thin_savings": 538.7708, + "shared_logical_used": 29333184512, + "system_free_space": 140060300288, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91171198074880, + "logical_used": 60533104640, + "logical_used_volume": 38877855744, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14351220736, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365829855439, + "efficiency_ratio": 17631.232, + "data_reduction": 5.5533795, + "data_physical_used": 5171005249, + "snapshot_savings": 16.08733, + "thin_savings": 550.8509, + "shared_logical_used": 28716556288, + "system_free_space": 140058051174, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91187304202240, + "logical_used": 60873945088, + "logical_used_volume": 39218696192, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14694166528, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365836261702, + "efficiency_ratio": 17634.209, + "data_reduction": 5.6196566, + "data_physical_used": 5171046120, + "snapshot_savings": 16.071285, + "thin_savings": 544.4815, + "shared_logical_used": 29059502080, + "system_free_space": 140052183244, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91164755623936, + "logical_used": 61006577664, + "logical_used_volume": 39351328768, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14757957632, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365844209867, + "efficiency_ratio": 17629.715, + "data_reduction": 5.63195, + "data_physical_used": 5171085537, + "snapshot_savings": 16.103897, + "thin_savings": 542.2417, + "shared_logical_used": 29123293184, + "system_free_space": 140045136281, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91193746653184, + "logical_used": 61016043520, + "logical_used_volume": 39360794624, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14836264960, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365849381350, + "efficiency_ratio": 17635.354, + "data_reduction": 5.647104, + "data_physical_used": 5171075409, + "snapshot_savings": 16.071285, + "thin_savings": 541.86334, + "shared_logical_used": 29201600512, + "system_free_space": 140043848294, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91180861751296, + "logical_used": 60740677632, + "logical_used_volume": 39085428736, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14560899072, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365856134265, + "efficiency_ratio": 17632.842, + "data_reduction": 5.593846, + "data_physical_used": 5171081933, + "snapshot_savings": 16.071285, + "thin_savings": 546.94727, + "shared_logical_used": 28926234624, + "system_free_space": 140037665177, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61084884992, + "logical_used_volume": 39429636096, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14903013376, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365824865478, + "efficiency_ratio": 17635.838, + "data_reduction": 5.659967, + "data_physical_used": 5171116561, + "snapshot_savings": 16.087236, + "thin_savings": 540.6085, + "shared_logical_used": 29268348928, + "system_free_space": 140032408166, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61460328448, + "logical_used_volume": 39805079552, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15251415040, + "shared_logical_used_file_system": 14365331456, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365828760687, + "efficiency_ratio": 17635.643, + "data_reduction": 5.7272773, + "data_physical_used": 5171173841, + "snapshot_savings": 16.07009, + "thin_savings": 533.8429, + "shared_logical_used": 29616746496, + "system_free_space": 140027999436, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91184082976768, + "logical_used": 61016035328, + "logical_used_volume": 39360786432, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14836256768, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365835293177, + "efficiency_ratio": 17632.908, + "data_reduction": 5.646918, + "data_physical_used": 5171244722, + "snapshot_savings": 16.071285, + "thin_savings": 541.5068, + "shared_logical_used": 29201592320, + "system_free_space": 140022154854, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91219516456960, + "logical_used": 61222555648, + "logical_used_volume": 39567306752, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14973935616, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365841058980, + "efficiency_ratio": 17639.676, + "data_reduction": 5.673514, + "data_physical_used": 5171269430, + "snapshot_savings": 16.103897, + "thin_savings": 539.9517, + "shared_logical_used": 29339271168, + "system_free_space": 140017248051, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91184082976768, + "logical_used": 60809494528, + "logical_used_volume": 39154245632, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14629715968, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365846209618, + "efficiency_ratio": 17632.463, + "data_reduction": 5.6068354, + "data_physical_used": 5171375456, + "snapshot_savings": 16.071285, + "thin_savings": 545.667, + "shared_logical_used": 28995051520, + "system_free_space": 140019485491, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91200189104128, + "logical_used": 61153722368, + "logical_used_volume": 39498473472, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14973943808, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365852076492, + "efficiency_ratio": 17635.506, + "data_reduction": 5.673377, + "data_physical_used": 5171396302, + "snapshot_savings": 16.071285, + "thin_savings": 539.36005, + "shared_logical_used": 29339279360, + "system_free_space": 140013341286, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T16:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91216295231488, + "logical_used": 61221441536, + "logical_used_volume": 39566192640, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15039557632, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365855944905, + "efficiency_ratio": 17638.328, + "data_reduction": 5.6859703, + "data_physical_used": 5171482250, + "snapshot_savings": 16.08733, + "thin_savings": 538.612, + "shared_logical_used": 29404893184, + "system_free_space": 140010442342, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91190525427712, + "logical_used": 60947202048, + "logical_used_volume": 39291953152, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14767042560, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365860476414, + "efficiency_ratio": 17633.352, + "data_reduction": 5.6332765, + "data_physical_used": 5171480221, + "snapshot_savings": 16.074186, + "thin_savings": 543.12463, + "shared_logical_used": 29132378112, + "system_free_space": 140005449932, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91174419300352, + "logical_used": 61291393024, + "logical_used_volume": 39636144128, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15111614464, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365864797572, + "efficiency_ratio": 17630.016, + "data_reduction": 5.6998343, + "data_physical_used": 5171545015, + "snapshot_savings": 16.071285, + "thin_savings": 535.705, + "shared_logical_used": 29476950016, + "system_free_space": 140002329190, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91193746653184, + "logical_used": 61360250880, + "logical_used_volume": 39705001984, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15111630848, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365866855536, + "efficiency_ratio": 17633.502, + "data_reduction": 5.699756, + "data_physical_used": 5171618707, + "snapshot_savings": 16.103897, + "thin_savings": 536.2933, + "shared_logical_used": 29476966400, + "system_free_space": 140000924467, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91177640525824, + "logical_used": 61016043520, + "logical_used_volume": 39360794624, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14836264960, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365833249408, + "efficiency_ratio": 17630.477, + "data_reduction": 5.646539, + "data_physical_used": 5171592919, + "snapshot_savings": 16.071285, + "thin_savings": 541.26886, + "shared_logical_used": 29201600512, + "system_free_space": 139997562470, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91193746653184, + "logical_used": 61360250880, + "logical_used_volume": 39705001984, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15180472320, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365837241496, + "efficiency_ratio": 17633.54, + "data_reduction": 5.71308, + "data_physical_used": 5171607802, + "snapshot_savings": 16.071285, + "thin_savings": 535.06494, + "shared_logical_used": 29545807872, + "system_free_space": 139993192652, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91193746653184, + "logical_used": 61704458240, + "logical_used_volume": 40049209344, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15522574336, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365841972407, + "efficiency_ratio": 17633.18, + "data_reduction": 5.7791123, + "data_physical_used": 5171712827, + "snapshot_savings": 16.08733, + "thin_savings": 528.435, + "shared_logical_used": 29887909888, + "system_free_space": 139988997939, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91193746653184, + "logical_used": 61360250880, + "logical_used_volume": 39705001984, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15182577664, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365845876914, + "efficiency_ratio": 17633.143, + "data_reduction": 5.7133584, + "data_physical_used": 5171724203, + "snapshot_savings": 16.055273, + "thin_savings": 535.06494, + "shared_logical_used": 29547913216, + "system_free_space": 139985772134, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91209852780544, + "logical_used": 61699416064, + "logical_used_volume": 40044167168, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15519637504, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365850815685, + "efficiency_ratio": 17636.057, + "data_reduction": 5.7784667, + "data_physical_used": 5171782845, + "snapshot_savings": 16.071285, + "thin_savings": 529.11084, + "shared_logical_used": 29884973056, + "system_free_space": 139981180518, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61081493504, + "logical_used_volume": 39426244608, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14832873472, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365856289297, + "efficiency_ratio": 17633.484, + "data_reduction": 5.64565, + "data_physical_used": 5171806710, + "snapshot_savings": 16.103897, + "thin_savings": 541.9312, + "shared_logical_used": 29198209024, + "system_free_space": 139976503296, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91209852780544, + "logical_used": 61488390144, + "logical_used_volume": 39833141248, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15308611584, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365863649946, + "efficiency_ratio": 17635.855, + "data_reduction": 5.737598, + "data_physical_used": 5171841525, + "snapshot_savings": 16.071285, + "thin_savings": 533.1618, + "shared_logical_used": 29673947136, + "system_free_space": 139969849344, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61076475904, + "logical_used_volume": 39421227008, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14896697344, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365868148185, + "efficiency_ratio": 17633.201, + "data_reduction": 5.6579, + "data_physical_used": 5171889786, + "snapshot_savings": 16.071285, + "thin_savings": 540.77594, + "shared_logical_used": 29262032896, + "system_free_space": 139965623500, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T17:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61420675072, + "logical_used_volume": 39765426176, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15240896512, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365873987573, + "efficiency_ratio": 17632.848, + "data_reduction": 5.724337, + "data_physical_used": 5171992916, + "snapshot_savings": 16.071285, + "thin_savings": 534.0062, + "shared_logical_used": 29606232064, + "system_free_space": 139964032000, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61489516544, + "logical_used_volume": 39834267648, + "logical_used_file_system": 21655248896, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15307632640, + "shared_logical_used_file_system": 14365335552, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365882728336, + "efficiency_ratio": 17636.074, + "data_reduction": 5.737277, + "data_physical_used": 5171960118, + "snapshot_savings": 16.08733, + "thin_savings": 533.2569, + "shared_logical_used": 29672968192, + "system_free_space": 139960413184, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91200189104128, + "logical_used": 61148684288, + "logical_used_volume": 39493410816, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14968881152, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365854803236, + "efficiency_ratio": 17633.566, + "data_reduction": 5.671778, + "data_physical_used": 5171965501, + "snapshot_savings": 16.071285, + "thin_savings": 539.4599, + "shared_logical_used": 29334241280, + "system_free_space": 139958852812, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61494591488, + "logical_used_volume": 39839318016, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15314788352, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365861644442, + "efficiency_ratio": 17632.844, + "data_reduction": 5.738627, + "data_physical_used": 5171994735, + "snapshot_savings": 16.071285, + "thin_savings": 532.45764, + "shared_logical_used": 29680148480, + "system_free_space": 139965483417, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91177640525824, + "logical_used": 61150384128, + "logical_used_volume": 39495110656, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 14970580992, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365864445797, + "efficiency_ratio": 17628.898, + "data_reduction": 5.672008, + "data_physical_used": 5172055559, + "snapshot_savings": 16.071285, + "thin_savings": 538.59796, + "shared_logical_used": 29335941120, + "system_free_space": 139963374387, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91193746653184, + "logical_used": 61494591488, + "logical_used_volume": 39839318016, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15314788352, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365869028598, + "efficiency_ratio": 17631.945, + "data_reduction": 5.7385373, + "data_physical_used": 5172075305, + "snapshot_savings": 16.071285, + "thin_savings": 532.45764, + "shared_logical_used": 29680148480, + "system_free_space": 139959335321, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91193746653184, + "logical_used": 61632274432, + "logical_used_volume": 39977000960, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15450378240, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365871276701, + "efficiency_ratio": 17631.94, + "data_reduction": 5.7647514, + "data_physical_used": 5172077290, + "snapshot_savings": 16.087236, + "thin_savings": 529.81177, + "shared_logical_used": 29815738368, + "system_free_space": 139964790784, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91180861751296, + "logical_used": 61219225600, + "logical_used_volume": 39563952128, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15039422464, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365874459047, + "efficiency_ratio": 17629.168, + "data_reduction": 5.6852045, + "data_physical_used": 5172158999, + "snapshot_savings": 16.071285, + "thin_savings": 537.3575, + "shared_logical_used": 29404782592, + "system_free_space": 139962074726, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61563432960, + "logical_used_volume": 39908159488, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15383629824, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365879363657, + "efficiency_ratio": 17632.299, + "data_reduction": 5.75176, + "data_physical_used": 5172154424, + "snapshot_savings": 16.071285, + "thin_savings": 531.248, + "shared_logical_used": 29748989952, + "system_free_space": 139957444198, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91206631555072, + "logical_used": 61974151168, + "logical_used_volume": 40318877696, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15725506560, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365882811290, + "efficiency_ratio": 17633.955, + "data_reduction": 5.8177896, + "data_physical_used": 5172216394, + "snapshot_savings": 16.103897, + "thin_savings": 524.98706, + "shared_logical_used": 30090866688, + "system_free_space": 139957269094, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91219516456960, + "logical_used": 61223616512, + "logical_used_volume": 39568343040, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15043813376, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365884896519, + "efficiency_ratio": 17636.11, + "data_reduction": 5.685882, + "data_physical_used": 5172315210, + "snapshot_savings": 16.071285, + "thin_savings": 538.6871, + "shared_logical_used": 29409173504, + "system_free_space": 139955876044, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91219516456960, + "logical_used": 61564436480, + "logical_used_volume": 39909163008, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15384633344, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365891024605, + "efficiency_ratio": 17636.19, + "data_reduction": 5.7518015, + "data_physical_used": 5172291677, + "snapshot_savings": 16.071285, + "thin_savings": 532.0445, + "shared_logical_used": 29749993472, + "system_free_space": 139950821376, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T18:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91219516456960, + "logical_used": 61908652032, + "logical_used_volume": 40253378560, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15728848896, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365872254293, + "efficiency_ratio": 17636.107, + "data_reduction": 5.8183236, + "data_physical_used": 5172316087, + "snapshot_savings": 16.071285, + "thin_savings": 525.49994, + "shared_logical_used": 30094209024, + "system_free_space": 139945369804, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61421748224, + "logical_used_volume": 39766474752, + "logical_used_file_system": 21655273472, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15239839744, + "shared_logical_used_file_system": 14365360128, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365881899958, + "efficiency_ratio": 17631.791, + "data_reduction": 5.723794, + "data_physical_used": 5172303288, + "snapshot_savings": 16.08733, + "thin_savings": 533.9854, + "shared_logical_used": 29605199872, + "system_free_space": 139942599270, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61765988352, + "logical_used_volume": 40110682112, + "logical_used_file_system": 21655306240, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15586152448, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365886955214, + "efficiency_ratio": 17631.648, + "data_reduction": 5.7907095, + "data_physical_used": 5172344723, + "snapshot_savings": 16.071285, + "thin_savings": 527.3828, + "shared_logical_used": 29951545344, + "system_free_space": 139938451251, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91200189104128, + "logical_used": 62110195712, + "logical_used_volume": 40454889472, + "logical_used_file_system": 21655306240, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15930359808, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365893660530, + "efficiency_ratio": 17632.314, + "data_reduction": 5.8572707, + "data_physical_used": 5172332665, + "snapshot_savings": 16.071285, + "thin_savings": 520.9422, + "shared_logical_used": 30295752704, + "system_free_space": 139932832358, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91180861751296, + "logical_used": 61765988352, + "logical_used_volume": 40110682112, + "logical_used_file_system": 21655306240, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15586152448, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365895240769, + "efficiency_ratio": 17628.527, + "data_reduction": 5.7907066, + "data_physical_used": 5172347548, + "snapshot_savings": 16.071285, + "thin_savings": 526.8043, + "shared_logical_used": 29951545344, + "system_free_space": 139931637760, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61834903552, + "logical_used_volume": 40179597312, + "logical_used_file_system": 21655306240, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15655067648, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365896338628, + "efficiency_ratio": 17631.484, + "data_reduction": 5.8039784, + "data_physical_used": 5172393371, + "snapshot_savings": 16.071285, + "thin_savings": 526.0806, + "shared_logical_used": 30020460544, + "system_free_space": 139930855628, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91180861751296, + "logical_used": 61421780992, + "logical_used_volume": 39766474752, + "logical_used_file_system": 21655306240, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15241945088, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365881122779, + "efficiency_ratio": 17628.172, + "data_reduction": 5.724044, + "data_physical_used": 5172451083, + "snapshot_savings": 16.071285, + "thin_savings": 533.399, + "shared_logical_used": 29607337984, + "system_free_space": 139946268672, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61765988352, + "logical_used_volume": 40110682112, + "logical_used_file_system": 21655306240, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15586152448, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365885558280, + "efficiency_ratio": 17631.408, + "data_reduction": 5.7906303, + "data_physical_used": 5172415235, + "snapshot_savings": 16.071285, + "thin_savings": 527.3828, + "shared_logical_used": 29951545344, + "system_free_space": 139942490316, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91229180133376, + "logical_used": 62115250176, + "logical_used_volume": 40459943936, + "logical_used_file_system": 21655306240, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15935414272, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365890206972, + "efficiency_ratio": 17637.512, + "data_reduction": 5.858113, + "data_physical_used": 5172452028, + "snapshot_savings": 16.071285, + "thin_savings": 521.99146, + "shared_logical_used": 30300807168, + "system_free_space": 139938174976, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91206631555072, + "logical_used": 60833480704, + "logical_used_volume": 39781625856, + "logical_used_file_system": 21051854848, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15257096192, + "shared_logical_used_file_system": 14365392896, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365896331412, + "efficiency_ratio": 17633.014, + "data_reduction": 5.7269273, + "data_physical_used": 5172492857, + "snapshot_savings": 15.785416, + "thin_savings": 534.04193, + "shared_logical_used": 29622489088, + "system_free_space": 139932135833, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91206631555072, + "logical_used": 61108846592, + "logical_used_volume": 40056991744, + "logical_used_file_system": 21051854848, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15532462080, + "shared_logical_used_file_system": 14365388800, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365898862232, + "efficiency_ratio": 17632.924, + "data_reduction": 5.7801337, + "data_physical_used": 5172518862, + "snapshot_savings": 15.785446, + "thin_savings": 528.74963, + "shared_logical_used": 29897850880, + "system_free_space": 139930256384, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91206631555072, + "logical_used": 61712334848, + "logical_used_volume": 40056991744, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15532462080, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365861837107, + "efficiency_ratio": 17632.78, + "data_reduction": 5.780094, + "data_physical_used": 5172561554, + "snapshot_savings": 16.071285, + "thin_savings": 528.74896, + "shared_logical_used": 29897891840, + "system_free_space": 139929637683, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T19:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91206631555072, + "logical_used": 61712334848, + "logical_used_volume": 40056991744, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15532462080, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365862320052, + "efficiency_ratio": 17632.562, + "data_reduction": 5.780023, + "data_physical_used": 5172625150, + "snapshot_savings": 16.071285, + "thin_savings": 528.74896, + "shared_logical_used": 29897891840, + "system_free_space": 139929197977, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91206631555072, + "logical_used": 61743575040, + "logical_used_volume": 40088231936, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15534567424, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365862962062, + "efficiency_ratio": 17632.63, + "data_reduction": 5.7804527, + "data_physical_used": 5172605068, + "snapshot_savings": 16.070057, + "thin_savings": 528.74896, + "shared_logical_used": 29899997184, + "system_free_space": 139939525222, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91206631555072, + "logical_used": 61712334848, + "logical_used_volume": 40056991744, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15532462080, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366789195819, + "efficiency_ratio": 17632.414, + "data_reduction": 5.7799745, + "data_physical_used": 5172668641, + "snapshot_savings": 16.071285, + "thin_savings": 528.74896, + "shared_logical_used": 29897891840, + "system_free_space": 139934680678, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61697183744, + "logical_used_volume": 40041840640, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15517310976, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366793044283, + "efficiency_ratio": 17630.484, + "data_reduction": 5.7770257, + "data_physical_used": 5172686235, + "snapshot_savings": 16.071285, + "thin_savings": 528.5734, + "shared_logical_used": 29882740736, + "system_free_space": 139931505459, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61430185984, + "logical_used_volume": 39774842880, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15250313216, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366794215416, + "efficiency_ratio": 17633.545, + "data_reduction": 5.725391, + "data_physical_used": 5172702287, + "snapshot_savings": 16.071285, + "thin_savings": 534.40717, + "shared_logical_used": 29615742976, + "system_free_space": 139930649395, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 61774442496, + "logical_used_volume": 40119099392, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15594569728, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366799606369, + "efficiency_ratio": 17639.678, + "data_reduction": 5.7919126, + "data_physical_used": 5172729986, + "snapshot_savings": 16.071198, + "thin_savings": 528.958, + "shared_logical_used": 29959999488, + "system_free_space": 139925839872, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91229180133376, + "logical_used": 62111911936, + "logical_used_volume": 40456568832, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15932039168, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366805087403, + "efficiency_ratio": 17636.305, + "data_reduction": 5.857066, + "data_physical_used": 5172806255, + "snapshot_savings": 16.071285, + "thin_savings": 522.0533, + "shared_logical_used": 30297468928, + "system_free_space": 139920956416, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61430231040, + "logical_used_volume": 39774887936, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15248252928, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366813696034, + "efficiency_ratio": 17633.291, + "data_reduction": 5.7249107, + "data_physical_used": 5172776489, + "snapshot_savings": 16.08733, + "thin_savings": 534.4063, + "shared_logical_used": 29613682688, + "system_free_space": 139912870502, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61774442496, + "logical_used_volume": 40119099392, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15594569728, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366776074785, + "efficiency_ratio": 17633.062, + "data_reduction": 5.7917852, + "data_physical_used": 5172843389, + "snapshot_savings": 16.071285, + "thin_savings": 527.8011, + "shared_logical_used": 29959999488, + "system_free_space": 139914819993, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61705601024, + "logical_used_volume": 40050257920, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15525728256, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366775476885, + "efficiency_ratio": 17633.105, + "data_reduction": 5.778491, + "data_physical_used": 5172831261, + "snapshot_savings": 16.071285, + "thin_savings": 528.99304, + "shared_logical_used": 29891158016, + "system_free_space": 139915096268, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61774442496, + "logical_used_volume": 40119099392, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15594573824, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366777992735, + "efficiency_ratio": 17632.922, + "data_reduction": 5.79174, + "data_physical_used": 5172884999, + "snapshot_savings": 16.071255, + "thin_savings": 527.8011, + "shared_logical_used": 29960003584, + "system_free_space": 139912570880, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 62118649856, + "logical_used_volume": 40463306752, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15938781184, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366780997938, + "efficiency_ratio": 17632.617, + "data_reduction": 5.858179, + "data_physical_used": 5172974825, + "snapshot_savings": 16.071255, + "thin_savings": 521.35724, + "shared_logical_used": 30304210944, + "system_free_space": 139909998796, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T20:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91203410329600, + "logical_used": 61912125440, + "logical_used_volume": 40256782336, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15732256768, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366784737587, + "efficiency_ratio": 17630.77, + "data_reduction": 5.818262, + "data_physical_used": 5172968212, + "snapshot_savings": 16.071255, + "thin_savings": 524.85925, + "shared_logical_used": 30097686528, + "system_free_space": 139909971558, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91219516456960, + "logical_used": 62256332800, + "logical_used_volume": 40600989696, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16074358784, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366787913847, + "efficiency_ratio": 17633.746, + "data_reduction": 5.8843493, + "data_physical_used": 5173008435, + "snapshot_savings": 16.0873, + "thin_savings": 519.05096, + "shared_logical_used": 30439788544, + "system_free_space": 139907119308, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91219516456960, + "logical_used": 61566238720, + "logical_used_volume": 39910895616, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15386370048, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366789816702, + "efficiency_ratio": 17633.611, + "data_reduction": 5.751309, + "data_physical_used": 5173048360, + "snapshot_savings": 16.071255, + "thin_savings": 532.0098, + "shared_logical_used": 29751799808, + "system_free_space": 139905558937, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61907075072, + "logical_used_volume": 40251731968, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15727206400, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366796843137, + "efficiency_ratio": 17632.227, + "data_reduction": 5.8171506, + "data_physical_used": 5173088582, + "snapshot_savings": 16.071255, + "thin_savings": 525.1842, + "shared_logical_used": 30092636160, + "system_free_space": 139900150169, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91209852780544, + "logical_used": 62251282432, + "logical_used_volume": 40595939328, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16071413760, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366788910784, + "efficiency_ratio": 17631.475, + "data_reduction": 5.8836455, + "data_physical_used": 5173126418, + "snapshot_savings": 16.071255, + "thin_savings": 518.8023, + "shared_logical_used": 30436843520, + "system_free_space": 139908539596, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91196967878656, + "logical_used": 61700550656, + "logical_used_volume": 40045207552, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15520681984, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366791454683, + "efficiency_ratio": 17628.918, + "data_reduction": 5.7771635, + "data_physical_used": 5173145953, + "snapshot_savings": 16.071255, + "thin_savings": 528.62537, + "shared_logical_used": 29886111744, + "system_free_space": 139907430604, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 61975916544, + "logical_used_volume": 40320573440, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15796047872, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366758393916, + "efficiency_ratio": 17631.832, + "data_reduction": 5.8303275, + "data_physical_used": 5173204667, + "snapshot_savings": 16.071255, + "thin_savings": 524.01013, + "shared_logical_used": 30161477632, + "system_free_space": 139903932416, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 62044758016, + "logical_used_volume": 40389414912, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15862784000, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366761557589, + "efficiency_ratio": 17631.768, + "data_reduction": 5.843207, + "data_physical_used": 5173223645, + "snapshot_savings": 16.0873, + "thin_savings": 522.72723, + "shared_logical_used": 30228213760, + "system_free_space": 139900694937, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91200189104128, + "logical_used": 61700550656, + "logical_used_volume": 40045207552, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15520681984, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366766307344, + "efficiency_ratio": 17629.176, + "data_reduction": 5.7770443, + "data_physical_used": 5173253370, + "snapshot_savings": 16.071255, + "thin_savings": 528.74133, + "shared_logical_used": 29886111744, + "system_free_space": 139896597504, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91235622584320, + "logical_used": 62113599488, + "logical_used_volume": 40458256384, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15864889344, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366773907855, + "efficiency_ratio": 17635.941, + "data_reduction": 5.8435526, + "data_physical_used": 5173277797, + "snapshot_savings": 16.103867, + "thin_savings": 523.4146, + "shared_logical_used": 30230319104, + "system_free_space": 139889702297, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91225958907904, + "logical_used": 61437939712, + "logical_used_volume": 40386048000, + "logical_used_file_system": 21051891712, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15861522432, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366775199211, + "efficiency_ratio": 17633.807, + "data_reduction": 5.842813, + "data_physical_used": 5173355787, + "snapshot_savings": 15.785385, + "thin_savings": 523.2481, + "shared_logical_used": 30226952192, + "system_free_space": 139888927948, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91216295231488, + "logical_used": 61908721664, + "logical_used_volume": 40253378560, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15866535936, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366780221446, + "efficiency_ratio": 17631.777, + "data_reduction": 5.8437285, + "data_physical_used": 5173403728, + "snapshot_savings": 14.668742, + "thin_savings": 526.6792, + "shared_logical_used": 30231965696, + "system_free_space": 139884180684, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T21:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 62184087552, + "logical_used_volume": 40528744448, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16004218880, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366784882029, + "efficiency_ratio": 17638.086, + "data_reduction": 5.8703694, + "data_physical_used": 5173379602, + "snapshot_savings": 16.071255, + "thin_savings": 521.4039, + "shared_logical_used": 30369648640, + "system_free_space": 139879616307, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 62316830720, + "logical_used_volume": 40661487616, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16134856704, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366787987067, + "efficiency_ratio": 17638.096, + "data_reduction": 5.8956246, + "data_physical_used": 5173376479, + "snapshot_savings": 16.0873, + "thin_savings": 518.96606, + "shared_logical_used": 30500286464, + "system_free_space": 139877277696, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91216295231488, + "logical_used": 61685952512, + "logical_used_volume": 40179523584, + "logical_used_file_system": 21506428928, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15654998016, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366791071261, + "efficiency_ratio": 17631.838, + "data_reduction": 5.802859, + "data_physical_used": 5173385973, + "snapshot_savings": 16.00071, + "thin_savings": 526.7738, + "shared_logical_used": 30020427776, + "system_free_space": 139873798963, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 62252965888, + "logical_used_volume": 40597622784, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16004255744, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366799117229, + "efficiency_ratio": 17637.174, + "data_reduction": 5.8702807, + "data_physical_used": 5173463884, + "snapshot_savings": 16.103867, + "thin_savings": 521.1752, + "shared_logical_used": 30369685504, + "system_free_space": 139866806476, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 61644460032, + "logical_used_volume": 40592568320, + "logical_used_file_system": 21051891712, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16068042752, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366763833450, + "efficiency_ratio": 17637.81, + "data_reduction": 5.882615, + "data_physical_used": 5173460088, + "snapshot_savings": 15.785385, + "thin_savings": 520.2289, + "shared_logical_used": 30433472512, + "system_free_space": 139872047923, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91235622584320, + "logical_used": 61921505280, + "logical_used_volume": 40869613568, + "logical_used_file_system": 21051891712, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16345088000, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366767882698, + "efficiency_ratio": 17635.162, + "data_reduction": 5.936113, + "data_physical_used": 5173506766, + "snapshot_savings": 15.785385, + "thin_savings": 514.7389, + "shared_logical_used": 30710517760, + "system_free_space": 139867849318, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 61506777088, + "logical_used_volume": 40454885376, + "logical_used_file_system": 21051891712, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15932039168, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366771474733, + "efficiency_ratio": 17634.547, + "data_reduction": 5.8562756, + "data_physical_used": 5173504537, + "snapshot_savings": 15.772837, + "thin_savings": 522.1987, + "shared_logical_used": 30297468928, + "system_free_space": 139864413388, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91264613613568, + "logical_used": 62192590848, + "logical_used_volume": 40537247744, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16010616832, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366775036834, + "efficiency_ratio": 17640.7, + "data_reduction": 5.87144, + "data_physical_used": 5173525909, + "snapshot_savings": 16.0873, + "thin_savings": 521.8168, + "shared_logical_used": 30376046592, + "system_free_space": 139868362956, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91238843809792, + "logical_used": 61843230720, + "logical_used_volume": 40187887616, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15663362048, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366780097656, + "efficiency_ratio": 17635.771, + "data_reduction": 5.804336, + "data_physical_used": 5173510219, + "snapshot_savings": 16.071255, + "thin_savings": 527.42365, + "shared_logical_used": 30028791808, + "system_free_space": 139863440588, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91251728711680, + "logical_used": 62256312320, + "logical_used_volume": 40600969216, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16007602176, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366786356055, + "efficiency_ratio": 17638.002, + "data_reduction": 5.8707886, + "data_physical_used": 5173586460, + "snapshot_savings": 16.103867, + "thin_savings": 521.34143, + "shared_logical_used": 30373031936, + "system_free_space": 139857374208, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 62184108032, + "logical_used_volume": 40528764928, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16004239360, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366787833980, + "efficiency_ratio": 17637.342, + "data_reduction": 5.870126, + "data_physical_used": 5173597610, + "snapshot_savings": 16.071255, + "thin_savings": 521.40344, + "shared_logical_used": 30369669120, + "system_free_space": 139856311910, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 62527574016, + "logical_used_volume": 40872230912, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16347705344, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366794178903, + "efficiency_ratio": 17637.273, + "data_reduction": 5.936491, + "data_physical_used": 5173617521, + "snapshot_savings": 16.071255, + "thin_savings": 515.1423, + "shared_logical_used": 30713135104, + "system_free_space": 139850490675, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T22:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91238843809792, + "logical_used": 61980950528, + "logical_used_volume": 40325607424, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15801081856, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366797611005, + "efficiency_ratio": 17635.379, + "data_reduction": 5.8308263, + "data_physical_used": 5173625239, + "snapshot_savings": 16.071255, + "thin_savings": 524.83466, + "shared_logical_used": 30166511616, + "system_free_space": 139847634534, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91254949937152, + "logical_used": 62321795072, + "logical_used_volume": 40666451968, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16139821056, + "shared_logical_used_file_system": 14365425664, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366802911147, + "efficiency_ratio": 17638.326, + "data_reduction": 5.8962445, + "data_physical_used": 5173673771, + "snapshot_savings": 16.08733, + "thin_savings": 519.1022, + "shared_logical_used": 30505246720, + "system_free_space": 139852914892, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91254949937152, + "logical_used": 62530015232, + "logical_used_volume": 40874672128, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16350146560, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366771736246, + "efficiency_ratio": 17638.125, + "data_reduction": 5.93683, + "data_physical_used": 5173733176, + "snapshot_savings": 16.071255, + "thin_savings": 515.32355, + "shared_logical_used": 30715576320, + "system_free_space": 139851774771, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91225958907904, + "logical_used": 62046433280, + "logical_used_volume": 40391090176, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15866564608, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366775745003, + "efficiency_ratio": 17632.436, + "data_reduction": 5.8433332, + "data_physical_used": 5173758609, + "snapshot_savings": 16.071255, + "thin_savings": 523.1543, + "shared_logical_used": 30231994368, + "system_free_space": 139847552819, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91225958907904, + "logical_used": 62043062272, + "logical_used_volume": 40387719168, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15863193600, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366776910103, + "efficiency_ratio": 17632.379, + "data_reduction": 5.8426633, + "data_physical_used": 5173775042, + "snapshot_savings": 16.071255, + "thin_savings": 523.21704, + "shared_logical_used": 30228623360, + "system_free_space": 139846513868, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91222737682432, + "logical_used": 62041391104, + "logical_used_volume": 40386048000, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15863197696, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366779452915, + "efficiency_ratio": 17631.605, + "data_reduction": 5.8426137, + "data_physical_used": 5173819546, + "snapshot_savings": 16.05851, + "thin_savings": 523.13354, + "shared_logical_used": 30228627456, + "system_free_space": 139844132454, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91225958907904, + "logical_used": 62043074560, + "logical_used_volume": 40387731456, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15863205888, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366782657303, + "efficiency_ratio": 17632.176, + "data_reduction": 5.842598, + "data_physical_used": 5173834907, + "snapshot_savings": 16.071255, + "thin_savings": 523.2168, + "shared_logical_used": 30228635648, + "system_free_space": 139841326899, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91225958907904, + "logical_used": 62073278464, + "logical_used_volume": 40417935360, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15864274944, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366786538345, + "efficiency_ratio": 17632.064, + "data_reduction": 5.842768, + "data_physical_used": 5173866837, + "snapshot_savings": 16.070026, + "thin_savings": 523.2361, + "shared_logical_used": 30229704704, + "system_free_space": 139837692518, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91209852780544, + "logical_used": 62049808384, + "logical_used_volume": 40394465280, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15869939712, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366788382717, + "efficiency_ratio": 17628.842, + "data_reduction": 5.8438263, + "data_physical_used": 5173899097, + "snapshot_savings": 16.071255, + "thin_savings": 522.51886, + "shared_logical_used": 30235369472, + "system_free_space": 139836147712, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91213074006016, + "logical_used": 62049808384, + "logical_used_volume": 40394465280, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15869939712, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366792928344, + "efficiency_ratio": 17629.248, + "data_reduction": 5.843755, + "data_physical_used": 5173962881, + "snapshot_savings": 16.071255, + "thin_savings": 522.51886, + "shared_logical_used": 30235369472, + "system_free_space": 139831882956, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91209852780544, + "logical_used": 62049808384, + "logical_used_volume": 40394465280, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15869939712, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366793806758, + "efficiency_ratio": 17628.527, + "data_reduction": 5.843722, + "data_physical_used": 5173991785, + "snapshot_savings": 16.071255, + "thin_savings": 522.51886, + "shared_logical_used": 30235369472, + "system_free_space": 139831178649, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91225958907904, + "logical_used": 62187491328, + "logical_used_volume": 40532148224, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16007622656, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366795514672, + "efficiency_ratio": 17631.715, + "data_reduction": 5.8703575, + "data_physical_used": 5173970137, + "snapshot_savings": 16.071255, + "thin_savings": 520.5432, + "shared_logical_used": 30373052416, + "system_free_space": 139829668864, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-06T23:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91242065035264, + "logical_used": 62600540160, + "logical_used_volume": 40945197056, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16420671488, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366763863484, + "efficiency_ratio": 17634.465, + "data_reduction": 5.950067, + "data_physical_used": 5174076208, + "snapshot_savings": 16.071255, + "thin_savings": 513.60675, + "shared_logical_used": 30786101248, + "system_free_space": 139824703692, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91229180133376, + "logical_used": 62118649856, + "logical_used_volume": 40463306752, + "logical_used_file_system": 21655343104, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15938781184, + "shared_logical_used_file_system": 14365429760, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366769331290, + "efficiency_ratio": 17631.885, + "data_reduction": 5.856902, + "data_physical_used": 5174102614, + "snapshot_savings": 16.071255, + "thin_savings": 521.9285, + "shared_logical_used": 30304210944, + "system_free_space": 139821446758, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 62454464512, + "logical_used_volume": 40799096832, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16274571264, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366772343468, + "efficiency_ratio": 17635.03, + "data_reduction": 5.9218154, + "data_physical_used": 5174093296, + "snapshot_savings": 16.071255, + "thin_savings": 516.3495, + "shared_logical_used": 30640025600, + "system_free_space": 139818777395, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91277498515456, + "logical_used": 61929394176, + "logical_used_volume": 40877477888, + "logical_used_file_system": 21051916288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16352952320, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366778716276, + "efficiency_ratio": 17641.059, + "data_reduction": 5.9368978, + "data_physical_used": 5174151237, + "snapshot_savings": 15.785385, + "thin_savings": 516.0607, + "shared_logical_used": 30718406656, + "system_free_space": 139813932851, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 62119698432, + "logical_used_volume": 40464330752, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15939805184, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366763036042, + "efficiency_ratio": 17634.854, + "data_reduction": 5.8570566, + "data_physical_used": 5174144913, + "snapshot_savings": 16.071255, + "thin_savings": 522.48035, + "shared_logical_used": 30305259520, + "system_free_space": 139829762252, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91261392388096, + "logical_used": 62463905792, + "logical_used_volume": 40808538112, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16284012544, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366770020283, + "efficiency_ratio": 17637.66, + "data_reduction": 5.9234786, + "data_physical_used": 5174234856, + "snapshot_savings": 16.071255, + "thin_savings": 516.743, + "shared_logical_used": 30649466880, + "system_free_space": 139827544268, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91261392388096, + "logical_used": 62527713280, + "logical_used_volume": 40872345600, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16347820032, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366774551360, + "efficiency_ratio": 17637.531, + "data_reduction": 5.9357667, + "data_physical_used": 5174272607, + "snapshot_savings": 16.071255, + "thin_savings": 515.5902, + "shared_logical_used": 30713274368, + "system_free_space": 139823723110, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 62118027264, + "logical_used_volume": 40462659584, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 15936028672, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366781288062, + "efficiency_ratio": 17634.088, + "data_reduction": 5.856072, + "data_physical_used": 5174370042, + "snapshot_savings": 16.0873, + "thin_savings": 522.51135, + "shared_logical_used": 30301483008, + "system_free_space": 139817862963, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91261392388096, + "logical_used": 62460559360, + "logical_used_volume": 40805191680, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16280666112, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366786600999, + "efficiency_ratio": 17637.123, + "data_reduction": 5.9226513, + "data_physical_used": 5174392331, + "snapshot_savings": 16.071255, + "thin_savings": 516.8036, + "shared_logical_used": 30646120448, + "system_free_space": 139812963942, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 62129106944, + "logical_used_volume": 41077190656, + "logical_used_file_system": 21051916288, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16552665088, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366790672188, + "efficiency_ratio": 17633.932, + "data_reduction": 5.9751906, + "data_physical_used": 5174415388, + "snapshot_savings": 15.785385, + "thin_savings": 511.253, + "shared_logical_used": 30918119424, + "system_free_space": 139809006592, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91229180133376, + "logical_used": 62463930368, + "logical_used_volume": 40808562688, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16284037120, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366758298037, + "efficiency_ratio": 17630.617, + "data_reduction": 5.923208, + "data_physical_used": 5174474698, + "snapshot_savings": 16.071255, + "thin_savings": 515.61383, + "shared_logical_used": 30649491456, + "system_free_space": 139804881920, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 62739296256, + "logical_used_volume": 41083928576, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16559403008, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366760859602, + "efficiency_ratio": 17633.65, + "data_reduction": 5.976398, + "data_physical_used": 5174497900, + "snapshot_savings": 16.071255, + "thin_savings": 511.24524, + "shared_logical_used": 30924857344, + "system_free_space": 139802387660, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T00:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 62188564480, + "logical_used_volume": 40533196800, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16008671232, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366762407946, + "efficiency_ratio": 17631.045, + "data_reduction": 5.8699274, + "data_physical_used": 5174531824, + "snapshot_savings": 16.071255, + "thin_savings": 520.7514, + "shared_logical_used": 30374125568, + "system_free_space": 139801107456, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 62532771840, + "logical_used_volume": 40877404160, + "logical_used_file_system": 21655367680, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16352878592, + "shared_logical_used_file_system": 14365454336, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366768448721, + "efficiency_ratio": 17630.883, + "data_reduction": 5.936392, + "data_physical_used": 5174579837, + "snapshot_savings": 16.071255, + "thin_savings": 514.48566, + "shared_logical_used": 30718332928, + "system_free_space": 139795901030, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 62670491648, + "logical_used_volume": 41015087104, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16490561536, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366766771681, + "efficiency_ratio": 17633.662, + "data_reduction": 5.9628944, + "data_physical_used": 5174677046, + "snapshot_savings": 16.071255, + "thin_savings": 512.58105, + "shared_logical_used": 30856052736, + "system_free_space": 139794986598, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91203410329600, + "logical_used": 62180184064, + "logical_used_volume": 40524779520, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16000253952, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366771575464, + "efficiency_ratio": 17624.812, + "data_reduction": 5.868098, + "data_physical_used": 5174716708, + "snapshot_savings": 16.071255, + "thin_savings": 519.7658, + "shared_logical_used": 30365745152, + "system_free_space": 139790496153, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 62197010432, + "logical_used_volume": 40541605888, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16017084416, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366773201012, + "efficiency_ratio": 17633.36, + "data_reduction": 5.8712945, + "data_physical_used": 5174765948, + "snapshot_savings": 16.071222, + "thin_savings": 521.1655, + "shared_logical_used": 30382575616, + "system_free_space": 139789138124, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 62188593152, + "logical_used_volume": 40533188608, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16008667136, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366775284691, + "efficiency_ratio": 17630.139, + "data_reduction": 5.869632, + "data_physical_used": 5174797963, + "snapshot_savings": 16.071222, + "thin_savings": 520.75085, + "shared_logical_used": 30374158336, + "system_free_space": 139787830681, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 62188552192, + "logical_used_volume": 40533147648, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16008622080, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366779287755, + "efficiency_ratio": 17630.098, + "data_reduction": 5.86961, + "data_physical_used": 5174809803, + "snapshot_savings": 16.071255, + "thin_savings": 520.75165, + "shared_logical_used": 30374113280, + "system_free_space": 139785048473, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 62186901504, + "logical_used_volume": 40531496960, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16006971392, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366782754235, + "efficiency_ratio": 17630.105, + "data_reduction": 5.869293, + "data_physical_used": 5174807755, + "snapshot_savings": 16.071255, + "thin_savings": 520.78204, + "shared_logical_used": 30372462592, + "system_free_space": 139781756518, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91216295231488, + "logical_used": 62180184064, + "logical_used_volume": 40524779520, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16000253952, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366749343981, + "efficiency_ratio": 17626.766, + "data_reduction": 5.8679194, + "data_physical_used": 5174874247, + "snapshot_savings": 16.071255, + "thin_savings": 520.3358, + "shared_logical_used": 30365745152, + "system_free_space": 139778651340, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91222737682432, + "logical_used": 61805572096, + "logical_used_volume": 40596971520, + "logical_used_file_system": 21208600576, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16003604480, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366753335194, + "efficiency_ratio": 17627.967, + "data_reduction": 5.8685517, + "data_physical_used": 5174887373, + "snapshot_savings": 15.892204, + "thin_savings": 520.3881, + "shared_logical_used": 30369095680, + "system_free_space": 139774514995, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91216295231488, + "logical_used": 62317867008, + "logical_used_volume": 40662462464, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16137936896, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366755289540, + "efficiency_ratio": 17626.658, + "data_reduction": 5.8944893, + "data_physical_used": 5174905645, + "snapshot_savings": 16.071255, + "thin_savings": 517.81256, + "shared_logical_used": 30503428096, + "system_free_space": 139772736716, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 62524391424, + "logical_used_volume": 40868986880, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16344461312, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366758071316, + "efficiency_ratio": 17629.678, + "data_reduction": 5.934367, + "data_physical_used": 5174933124, + "snapshot_savings": 16.071255, + "thin_savings": 514.6364, + "shared_logical_used": 30709952512, + "system_free_space": 139770623795, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T01:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91232401358848, + "logical_used": 62593232896, + "logical_used_volume": 40937828352, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16413302784, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366683444356, + "efficiency_ratio": 17629.68, + "data_reduction": 5.9476705, + "data_physical_used": 5174932286, + "snapshot_savings": 16.071255, + "thin_savings": 513.4006, + "shared_logical_used": 30778793984, + "system_free_space": 139845408768, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91229180133376, + "logical_used": 62486790144, + "logical_used_volume": 40831385600, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16277737472, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366625371642, + "efficiency_ratio": 17628.791, + "data_reduction": 5.9213843, + "data_physical_used": 5175010747, + "snapshot_savings": 16.069933, + "thin_savings": 515.7653, + "shared_logical_used": 30643228672, + "system_free_space": 139907391692, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91216295231488, + "logical_used": 62524391424, + "logical_used_volume": 40868986880, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16344461312, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366536751824, + "efficiency_ratio": 17626.398, + "data_reduction": 5.934311, + "data_physical_used": 5174982138, + "snapshot_savings": 16.071255, + "thin_savings": 514.07324, + "shared_logical_used": 30709952512, + "system_free_space": 139995994316, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91235622584320, + "logical_used": 62868598784, + "logical_used_volume": 41213194240, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16619827200, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366495583001, + "efficiency_ratio": 17630.078, + "data_reduction": 5.987503, + "data_physical_used": 5174998369, + "snapshot_savings": 16.103867, + "thin_savings": 509.7285, + "shared_logical_used": 30985318400, + "system_free_space": 140038225510, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91264613613568, + "logical_used": 62193627136, + "logical_used_volume": 40538222592, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16013697024, + "shared_logical_used_file_system": 14365487104, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366471999915, + "efficiency_ratio": 17635.643, + "data_reduction": 5.870363, + "data_physical_used": 5175009333, + "snapshot_savings": 16.071285, + "thin_savings": 521.79767, + "shared_logical_used": 30379184128, + "system_free_space": 140061751705, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91264613613568, + "logical_used": 62532345856, + "logical_used_volume": 40876941312, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16352415744, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366454756867, + "efficiency_ratio": 17635.684, + "data_reduction": 5.93583, + "data_physical_used": 5174997447, + "snapshot_savings": 16.071255, + "thin_savings": 515.6193, + "shared_logical_used": 30717906944, + "system_free_space": 140079281561, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91251728711680, + "logical_used": 62526074880, + "logical_used_volume": 40870670336, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16346144768, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366401043928, + "efficiency_ratio": 17633.209, + "data_reduction": 5.9346237, + "data_physical_used": 5174992832, + "snapshot_savings": 16.071255, + "thin_savings": 515.28186, + "shared_logical_used": 30711635968, + "system_free_space": 140095939788, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91280719740928, + "logical_used": 62878687232, + "logical_used_volume": 41223282688, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16696651776, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366381371149, + "efficiency_ratio": 17638.664, + "data_reduction": 6.002305, + "data_physical_used": 5175035672, + "snapshot_savings": 16.079655, + "thin_savings": 510.02658, + "shared_logical_used": 31062142976, + "system_free_space": 140115617587, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91251728711680, + "logical_used": 62253010944, + "logical_used_volume": 40597606400, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16073080832, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366366734057, + "efficiency_ratio": 17633.127, + "data_reduction": 5.88183, + "data_physical_used": 5175017014, + "snapshot_savings": 16.071255, + "thin_savings": 520.24896, + "shared_logical_used": 30438572032, + "system_free_space": 140138322739, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91254949937152, + "logical_used": 62593232896, + "logical_used_volume": 40937828352, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16413302784, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366343815698, + "efficiency_ratio": 17633.676, + "data_reduction": 5.947549, + "data_physical_used": 5175038377, + "snapshot_savings": 16.071255, + "thin_savings": 514.07477, + "shared_logical_used": 30778793984, + "system_free_space": 140161689395, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91251728711680, + "logical_used": 62945857536, + "logical_used_volume": 41290452992, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16765927424, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366323450293, + "efficiency_ratio": 17632.615, + "data_reduction": 6.015539, + "data_physical_used": 5175167138, + "snapshot_savings": 16.071255, + "thin_savings": 507.8283, + "shared_logical_used": 31131418624, + "system_free_space": 140182503424, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91235622584320, + "logical_used": 62257442816, + "logical_used_volume": 40602038272, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16077512704, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366293100641, + "efficiency_ratio": 17629.314, + "data_reduction": 5.8824534, + "data_physical_used": 5175222250, + "snapshot_savings": 16.071255, + "thin_savings": 519.59906, + "shared_logical_used": 30443003904, + "system_free_space": 140213559091, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T02:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91251728711680, + "logical_used": 62601650176, + "logical_used_volume": 40946245632, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16421720064, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366273959041, + "efficiency_ratio": 17632.422, + "data_reduction": 5.948962, + "data_physical_used": 5175223968, + "snapshot_savings": 16.071255, + "thin_savings": 513.9239, + "shared_logical_used": 30787211264, + "system_free_space": 140233365299, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91251728711680, + "logical_used": 62739333120, + "logical_used_volume": 41083928576, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16559403008, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366245762717, + "efficiency_ratio": 17632.3, + "data_reduction": 5.9755254, + "data_physical_used": 5175259901, + "snapshot_savings": 16.071255, + "thin_savings": 511.46817, + "shared_logical_used": 30924894208, + "system_free_space": 140261950054, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:05:00Z", + "cluster_id": "0", + "logical_provisioned": 91251728711680, + "logical_used": 62945857536, + "logical_used_volume": 41290452992, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16765927424, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366213764316, + "efficiency_ratio": 17632.125, + "data_reduction": 6.015372, + "data_physical_used": 5175310603, + "snapshot_savings": 16.071255, + "thin_savings": 507.8283, + "shared_logical_used": 31131418624, + "system_free_space": 140293846220, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91242065035264, + "logical_used": 62395125760, + "logical_used_volume": 40739721216, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16215195648, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366158780035, + "efficiency_ratio": 17630.223, + "data_reduction": 5.908944, + "data_physical_used": 5175321590, + "snapshot_savings": 16.071255, + "thin_savings": 517.1994, + "shared_logical_used": 30580686848, + "system_free_space": 140349490380, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91271056064512, + "logical_used": 62667120640, + "logical_used_volume": 41011716096, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16487190528, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366096964095, + "efficiency_ratio": 17635.639, + "data_reduction": 5.9614377, + "data_physical_used": 5175375776, + "snapshot_savings": 16.071255, + "thin_savings": 513.42566, + "shared_logical_used": 30852681728, + "system_free_space": 140374658662, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:20:00Z", + "cluster_id": "0", + "logical_provisioned": 91287162191872, + "logical_used": 62678859776, + "logical_used_volume": 41023455232, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16498929664, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366066974179, + "efficiency_ratio": 17638.627, + "data_reduction": 5.963664, + "data_physical_used": 5175412310, + "snapshot_savings": 16.071255, + "thin_savings": 513.7762, + "shared_logical_used": 30864420864, + "system_free_space": 140405955584, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91254949937152, + "logical_used": 63006281728, + "logical_used_volume": 41350877184, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16826351616, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366053564738, + "efficiency_ratio": 17632.443, + "data_reduction": 6.0269427, + "data_physical_used": 5175400235, + "snapshot_savings": 16.071255, + "thin_savings": 506.8839, + "shared_logical_used": 31191842816, + "system_free_space": 140419886080, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91261392388096, + "logical_used": 62532816896, + "logical_used_volume": 40877412352, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16352886784, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366046067158, + "efficiency_ratio": 17633.525, + "data_reduction": 5.935405, + "data_physical_used": 5175447993, + "snapshot_savings": 16.071255, + "thin_savings": 515.4982, + "shared_logical_used": 30718377984, + "system_free_space": 140428147097, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:35:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 62799757312, + "logical_used_volume": 41144352768, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16619827200, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366029415895, + "efficiency_ratio": 17630.205, + "data_reduction": 5.9869123, + "data_physical_used": 5175509236, + "snapshot_savings": 16.071255, + "thin_savings": 510.17474, + "shared_logical_used": 30985318400, + "system_free_space": 140445330636, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:40:00Z", + "cluster_id": "0", + "logical_provisioned": 91248507486208, + "logical_used": 62937440256, + "logical_used_volume": 41282035712, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16688668672, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366008738547, + "efficiency_ratio": 17630.64, + "data_reduction": 6.00015, + "data_physical_used": 5175563565, + "snapshot_savings": 16.103867, + "thin_savings": 508.96127, + "shared_logical_used": 31054159872, + "system_free_space": 140466347008, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:45:00Z", + "cluster_id": "0", + "logical_provisioned": 91245286260736, + "logical_used": 63143964672, + "logical_used_volume": 41488560128, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16964034560, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366011296918, + "efficiency_ratio": 17629.637, + "data_reduction": 6.053224, + "data_physical_used": 5175676093, + "snapshot_savings": 16.071255, + "thin_savings": 504.16464, + "shared_logical_used": 31329525760, + "system_free_space": 140464031744, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:50:00Z", + "cluster_id": "0", + "logical_provisioned": 91235622584320, + "logical_used": 62730989568, + "logical_used_volume": 41075585024, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16551059456, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366014005134, + "efficiency_ratio": 17627.865, + "data_reduction": 5.973465, + "data_physical_used": 5175647505, + "snapshot_savings": 16.071255, + "thin_savings": 511.0572, + "shared_logical_used": 30916550656, + "system_free_space": 140462179532, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T03:55:00Z", + "cluster_id": "0", + "logical_provisioned": 91144354529280, + "logical_used": 62905544704, + "logical_used_volume": 41250140160, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 16757510144, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366016283611, + "efficiency_ratio": 17609.996, + "data_reduction": 6.0132737, + "data_physical_used": 5175716714, + "snapshot_savings": 16.056145, + "thin_savings": 507.97565, + "shared_logical_used": 31123001344, + "system_free_space": 140460335104, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T04:00:00Z", + "cluster_id": "0", + "logical_provisioned": 91144354529280, + "logical_used": 63249752064, + "logical_used_volume": 41594347520, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 17101717504, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366022030619, + "efficiency_ratio": 17609.904, + "data_reduction": 6.079746, + "data_physical_used": 5175743802, + "snapshot_savings": 16.056145, + "thin_savings": 502.01956, + "shared_logical_used": 31467208704, + "system_free_space": 140455202611, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T04:05:00Z", + "cluster_id": "0", + "logical_provisioned": 90976850804736, + "logical_used": 59325788160, + "logical_used_volume": 37670383616, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13177753600, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365985099277, + "efficiency_ratio": 17578.006, + "data_reduction": 5.3217416, + "data_physical_used": 5175607271, + "snapshot_savings": 16.056145, + "thin_savings": 572.89014, + "shared_logical_used": 27543244800, + "system_free_space": 140455735705, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T04:10:00Z", + "cluster_id": "0", + "logical_provisioned": 91028390412288, + "logical_used": 59750621184, + "logical_used_volume": 38095216640, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13533745152, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365991373534, + "efficiency_ratio": 17587.8, + "data_reduction": 5.390474, + "data_physical_used": 5175655236, + "snapshot_savings": 16.088757, + "thin_savings": 566.8554, + "shared_logical_used": 27899236352, + "system_free_space": 140449937817, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T04:15:00Z", + "cluster_id": "0", + "logical_provisioned": 91005841833984, + "logical_used": 59670003712, + "logical_used_volume": 38014599168, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13521969152, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365993184951, + "efficiency_ratio": 17583.463, + "data_reduction": 5.3882046, + "data_physical_used": 5175649788, + "snapshot_savings": 16.056145, + "thin_savings": 566.36456, + "shared_logical_used": 27887460352, + "system_free_space": 140448151756, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T04:20:00Z", + "cluster_id": "0", + "logical_provisioned": 90989735706624, + "logical_used": 59669983232, + "logical_used_volume": 38014578688, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13521948672, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365995629590, + "efficiency_ratio": 17580.326, + "data_reduction": 5.388193, + "data_physical_used": 5175657086, + "snapshot_savings": 16.056145, + "thin_savings": 565.7402, + "shared_logical_used": 27887439872, + "system_free_space": 140446233395, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T04:25:00Z", + "cluster_id": "0", + "logical_provisioned": 91005841833984, + "logical_used": 59678400512, + "logical_used_volume": 38022995968, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13530365952, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 365999686685, + "efficiency_ratio": 17583.098, + "data_reduction": 5.389715, + "data_physical_used": 5175757336, + "snapshot_savings": 16.056145, + "thin_savings": 566.1801, + "shared_logical_used": 27895857152, + "system_free_space": 140443139891, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + }, + { + "timestamp": "2023-06-07T04:30:00Z", + "cluster_id": "0", + "logical_provisioned": 91021947961344, + "logical_used": 59681759232, + "logical_used_volume": 38026354688, + "logical_used_file_system": 21655404544, + "logical_used_vvol": 0, + "shared_logical_used_volume": 13531619328, + "shared_logical_used_file_system": 14365491200, + "shared_logical_used_vvol": 0, + "physical_total": 47345047046144, + "physical_used": 366003363027, + "efficiency_ratio": 17586.121, + "data_reduction": 5.3899302, + "data_physical_used": 5175783211, + "snapshot_savings": 16.072174, + "thin_savings": 566.73096, + "shared_logical_used": 27897110528, + "system_free_space": 140439984128, + "repeat_count": 1, + "response_definition": "space_metrics_by_cluster", + "entity": "space_metrics_by_cluster" + } +] \ No newline at end of file diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/test_client.py b/manila/tests/share/drivers/dell_emc/plugins/powerstore/test_client.py new file mode 100644 index 0000000000..2631ba91f8 --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/test_client.py @@ -0,0 +1,674 @@ +# Copyright (c) 2023 Dell Inc. or its subsidiaries. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +import json +import pathlib + +import requests_mock + +from manila.share.drivers.dell_emc.plugins.powerstore import client +from manila import test + + +class TestClient(test.TestCase): + + REST_IP = "192.168.0.110" + NAS_SERVER_NAME = "powerstore-nasserver" + NAS_SERVER_ID = "6423d56e-eaf3-7424-be0b-1a9efb93188b" + NAS_SERVER_IP = "192.168.11.23" + NFS_EXPORT_NAME = "powerstore-nfs-share" + NFS_EXPORT_SIZE = 3221225472 + NFS_EXPORT_NEW_SIZE = 6221225472 + FILESYSTEM_ID = "6454e9a9-a698-e9bc-ca61-1a9efb93188b" + NFS_EXPORT_ID = "6454ec18-7b8d-1532-1b8a-1a9efb93188b" + RW_HOSTS = "192.168.1.10" + RO_HOSTS = "192.168.1.11" + SMB_SHARE_NAME = "powerstore-smb-share" + SMB_SHARE_ID = "64927ae9-3403-6930-a784-f227b9987c54" + RW_USERS = "user1" + RO_USERS = "user2" + SNAPSHOT_NAME = "powerstore-nfs-share-snap" + SNAPSHOT_ID = "6454ea29-09c3-030e-cfc3-1a9efb93188b" + CLONE_ID = "64560f05-e677-ec2a-7fcf-1a9efb93188b" + CLONE_NAME = "powerstore-nfs-share-snap-clone" + CLUSTER_ID = "0" + + CLIENT_OPTIONS = { + "rest_ip": REST_IP, + "rest_username": "admin", + "rest_password": "pwd", + "verify_certificate": False, + "certificate_path": None + } + + def setUp(self): + super(TestClient, self).setUp() + + self._mock_url = "https://%s/api/rest" % self.REST_IP + self.client = client.PowerStoreClient(**self.CLIENT_OPTIONS) + self.mockup_file_base = ( + str(pathlib.Path.cwd()) + + "/manila/tests/share/drivers/dell_emc/plugins/powerstore/mockup/" + ) + + def _getJsonFile(self, filename): + f = open(self.mockup_file_base + filename) + data = json.load(f) + f.close() + return data + + def test__verify_cert(self): + verify_cert = self.client.verify_certificate + certificate_path = self.client.certificate_path + self.client.verify_certificate = True + self.client.certificate_path = "fake_certificate_path" + self.assertEqual(self.client._verify_cert, + self.client.certificate_path) + self.client.verify_certificate = verify_cert + self.client.certificate_path = certificate_path + + @requests_mock.mock() + def test__send_request(self, m): + url = "{0}/fake_res".format(self._mock_url) + m.get(url, status_code=200) + self.client._send_get_request("/fake_res", None, None, False) + + @requests_mock.mock() + def test_get_nas_server_id(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nas_server_id_response( + m, self.NAS_SERVER_NAME, + self._getJsonFile("get_nas_server_id_response.json") + ) + id = self.client.get_nas_server_id(self.NAS_SERVER_NAME) + self.assertEqual(id, self.NAS_SERVER_ID) + + def _add_get_nas_server_id_response(self, m, nas_server, json_str): + url = "{0}/nas_server?name=eq.{1}".format( + self._mock_url, nas_server + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_nas_server_id_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nas_server_id_response_failure( + m, self.NAS_SERVER_NAME + ) + id = self.client.get_nas_server_id(self.NAS_SERVER_NAME) + self.assertIsNone(id) + + def _add_get_nas_server_id_response_failure(self, m, nas_server): + url = "{0}/nas_server?name=eq.{1}".format( + self._mock_url, nas_server + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_get_nas_server_interfaces(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nas_server_interfaces_response( + m, self.NAS_SERVER_ID, + self._getJsonFile("get_nas_server_interfaces_response.json") + ) + interfaces = self.client.get_nas_server_interfaces(self.NAS_SERVER_ID) + self.assertEqual(interfaces[0]['ip'], self.NAS_SERVER_IP) + self.assertEqual(interfaces[0]['preferred'], True) + + def _add_get_nas_server_interfaces_response(self, m, nas_server_id, + json_str): + url = "{0}/nas_server/{1}?select=" \ + "current_preferred_IPv4_interface_id," \ + "current_preferred_IPv6_interface_id," \ + "file_interfaces(id,ip_address)".format( + self._mock_url, nas_server_id + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_nas_server_interfaces_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nas_server_interfaces_response_failure( + m, self.NAS_SERVER_ID + ) + interfaces = self.client.get_nas_server_interfaces(self.NAS_SERVER_ID) + self.assertIsNone(interfaces) + + def _add_get_nas_server_interfaces_response_failure(self, m, + nas_server_id): + url = "{0}/nas_server/{1}?select=" \ + "current_preferred_IPv4_interface_id," \ + "current_preferred_IPv6_interface_id," \ + "file_interfaces(id,ip_address)".format( + self._mock_url, nas_server_id + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_create_filesystem(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_filesystem_response( + m, self._getJsonFile("create_filesystem_response.json") + ) + id = self.client.create_filesystem( + self.NAS_SERVER_ID, + self.NFS_EXPORT_NAME, + self.NFS_EXPORT_SIZE + ) + self.assertEqual(id, self.FILESYSTEM_ID) + + def _add_create_filesystem_response(self, m, json_str): + url = "{0}/file_system".format(self._mock_url) + m.post(url, status_code=201, json=json_str) + + @requests_mock.mock() + def test_create_filesystem_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_filesystem_response_failure(m) + id = self.client.create_filesystem( + self.NAS_SERVER_ID, + self.NFS_EXPORT_NAME, + self.NFS_EXPORT_SIZE + ) + self.assertIsNone(id) + + def _add_create_filesystem_response_failure(self, m): + url = "{0}/file_system".format(self._mock_url) + m.post(url, status_code=400) + + @requests_mock.mock() + def test_create_nfs_export(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_nfs_export_response( + m, self._getJsonFile("create_nfs_export_response.json") + ) + id = self.client.create_nfs_export(self.FILESYSTEM_ID, + self.NFS_EXPORT_NAME) + self.assertEqual(id, self.NFS_EXPORT_ID) + + def _add_create_nfs_export_response(self, m, json_str): + url = "{0}/nfs_export".format(self._mock_url) + m.post(url, status_code=201, json=json_str) + + @requests_mock.mock() + def test_create_nfs_export_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_nfs_export_response_failure(m) + id = self.client.create_nfs_export(self.FILESYSTEM_ID, + self.NFS_EXPORT_NAME) + self.assertIsNone(id) + + def _add_create_nfs_export_response_failure(self, m): + url = "{0}/nfs_export".format(self._mock_url) + m.post(url, status_code=400) + + @requests_mock.mock() + def test_delete_filesystem(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_delete_filesystem_response(m, self.FILESYSTEM_ID) + result = self.client.delete_filesystem(self.FILESYSTEM_ID) + self.assertEqual(result, True) + + def _add_delete_filesystem_response(self, m, filesystem_id): + url = "{0}/file_system/{1}".format( + self._mock_url, filesystem_id + ) + m.delete(url, status_code=204) + + @requests_mock.mock() + def test_get_nfs_export_name(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nfs_export_name_response( + m, + self.NFS_EXPORT_ID, + self._getJsonFile("get_nfs_export_name_response.json"), + ) + name = self.client.get_nfs_export_name(self.NFS_EXPORT_ID) + self.assertEqual(name, self.NFS_EXPORT_NAME) + + def _add_get_nfs_export_name_response(self, m, export_id, json_str): + url = "{0}/nfs_export/{1}?select=name".format( + self._mock_url, export_id + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_nfs_export_name_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nfs_export_name_response_failure(m, self.NFS_EXPORT_ID) + name = self.client.get_nfs_export_name(self.NFS_EXPORT_ID) + self.assertIsNone(name) + + def _add_get_nfs_export_name_response_failure(self, + m, export_id): + url = "{0}/nfs_export/{1}?select=name".format( + self._mock_url, export_id + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_get_nfs_export_id(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nfs_export_id_response( + m, self.NFS_EXPORT_NAME, + self._getJsonFile("get_nfs_export_id_response.json") + ) + id = self.client.get_nfs_export_id(self.NFS_EXPORT_NAME) + self.assertEqual(id, self.NFS_EXPORT_ID) + + def _add_get_nfs_export_id_response(self, m, name, json_str): + url = "{0}/nfs_export?select=id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_nfs_export_id_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nfs_export_id_response_failure(m, self.NFS_EXPORT_NAME) + id = self.client.get_nfs_export_id(self.NFS_EXPORT_NAME) + self.assertIsNone(id) + + def _add_get_nfs_export_id_response_failure(self, m, name): + url = "{0}/nfs_export?select=id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_get_filesystem_id(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_filesystem_id_response( + m, self.NFS_EXPORT_NAME, + self._getJsonFile("get_fileystem_id_response.json") + ) + id = self.client.get_filesystem_id(self.NFS_EXPORT_NAME) + self.assertEqual(id, self.FILESYSTEM_ID) + + def _add_get_filesystem_id_response(self, m, name, json_str): + url = "{0}/file_system?name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_filesystem_id_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_filesystem_id_response_failure(m, self.NFS_EXPORT_NAME) + id = self.client.get_filesystem_id(self.NFS_EXPORT_NAME) + self.assertIsNone(id) + + def _add_get_filesystem_id_response_failure(self, m, name): + url = "{0}/file_system?name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_set_export_access(self, m): + + self.assertEqual(0, len(m.request_history)) + self._add_set_export_access_response(m, self.NFS_EXPORT_ID) + result = self.client.set_export_access(self.NFS_EXPORT_ID, + self.RW_HOSTS, + self.RO_HOSTS) + self.assertEqual(result, True) + + def _add_set_export_access_response(self, m, export_id): + url = "{0}/nfs_export/{1}".format(self._mock_url, export_id) + m.patch(url, status_code=204) + + @requests_mock.mock() + def test_resize_filesystem(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_resize_filesystem_response(m, self.FILESYSTEM_ID) + result, detail = self.client.resize_filesystem( + self.FILESYSTEM_ID, self.NFS_EXPORT_NEW_SIZE) + self.assertTrue(result) + self.assertIsNone(detail) + + def _add_resize_filesystem_response(self, m, filesystem_id): + url = "{0}/file_system/{1}".format( + self._mock_url, filesystem_id + ) + m.patch(url, status_code=204) + + @requests_mock.mock() + def test_resize_filesystem_shrink_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_resize_filesystem_shrink_failure_response( + m, self.FILESYSTEM_ID, + self._getJsonFile( + "resize_filesystem_shrink_failure_response.json")) + result, detail = self.client.resize_filesystem( + self.FILESYSTEM_ID, self.NFS_EXPORT_NEW_SIZE) + self.assertFalse(result) + self.assertIsNotNone(detail) + + def _add_resize_filesystem_shrink_failure_response( + self, m, filesystem_id, json_str): + url = "{0}/file_system/{1}".format( + self._mock_url, filesystem_id + ) + m.patch(url, status_code=422, json=json_str) + + @requests_mock.mock() + def test_get_fsid_from_export_name(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_fsid_from_export_name_response( + m, self.NFS_EXPORT_NAME, + self._getJsonFile("get_fsid_from_export_name_response.json") + ) + id = self.client.get_fsid_from_export_name(self.NFS_EXPORT_NAME) + self.assertEqual(id, self.FILESYSTEM_ID) + + def _add_get_fsid_from_export_name_response(self, m, name, json_str): + url = "{0}/nfs_export?select=file_system_id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_fsid_from_export_name_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_fsid_from_export_name_response_failure( + m, self.NFS_EXPORT_NAME + ) + id = self.client.get_fsid_from_export_name(self.NFS_EXPORT_NAME) + self.assertIsNone(id) + + def _add_get_fsid_from_export_name_response_failure(self, m, name): + url = "{0}/nfs_export?select=file_system_id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_create_snapshot(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_snapshot_response( + m, self.FILESYSTEM_ID, + self._getJsonFile("create_snapshot_response.json") + ) + id = self.client.create_snapshot(self.FILESYSTEM_ID, + self.SNAPSHOT_NAME) + self.assertEqual(id, self.SNAPSHOT_ID) + + def _add_create_snapshot_response(self, m, filesystem_id, json_str): + url = "{0}/file_system/{1}/snapshot".format(self._mock_url, + filesystem_id) + m.post(url, status_code=201, json=json_str) + + @requests_mock.mock() + def test_create_snapshot_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_snapshot_response_failure(m, self.FILESYSTEM_ID) + id = self.client.create_snapshot(self.FILESYSTEM_ID, + self.SNAPSHOT_NAME) + self.assertIsNone(id) + + def _add_create_snapshot_response_failure(self, m, filesystem_id): + url = "{0}/file_system/{1}/snapshot".format(self._mock_url, + filesystem_id) + m.post(url, status_code=400) + + @requests_mock.mock() + def test_restore_snapshot(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_restore_snapshot_response( + m, self.SNAPSHOT_ID + ) + result = self.client.restore_snapshot(self.SNAPSHOT_ID) + self.assertEqual(result, True) + + def _add_restore_snapshot_response(self, m, snapshot_id): + url = "{0}/file_system/{1}/restore".format(self._mock_url, + snapshot_id) + m.post(url, status_code=204) + + @requests_mock.mock() + def test_restore_snapshot_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_restore_snapshot_response_failure( + m, self.SNAPSHOT_ID + ) + result = self.client.restore_snapshot(self.SNAPSHOT_ID) + self.assertEqual(result, False) + + def _add_restore_snapshot_response_failure(self, m, snapshot_id): + url = "{0}/file_system/{1}/restore".format(self._mock_url, + snapshot_id) + m.post(url, status_code=400) + + @requests_mock.mock() + def test_clone_snapshot(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_clone_snapshot_response( + m, self.SNAPSHOT_ID, + self._getJsonFile("clone_snapshot_response.json") + ) + id = self.client.clone_snapshot(self.SNAPSHOT_ID, + self.CLONE_NAME) + self.assertEqual(id, self.CLONE_ID) + + def _add_clone_snapshot_response(self, m, snapshot_id, json_str): + url = "{0}/file_system/{1}/clone".format(self._mock_url, + snapshot_id) + m.post(url, status_code=201, json=json_str) + + @requests_mock.mock() + def test_clone_snapshot_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_clone_snapshot_response_failure( + m, self.SNAPSHOT_ID + ) + id = self.client.clone_snapshot(self.SNAPSHOT_ID, + self.CLONE_NAME) + self.assertIsNone(id) + + def _add_clone_snapshot_response_failure(self, m, snapshot_id): + url = "{0}/file_system/{1}/clone".format(self._mock_url, + snapshot_id) + m.post(url, status_code=400) + + @requests_mock.mock() + def test_get_cluster_id(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_cluster_id_response( + m, + self._getJsonFile("get_cluster_id_response.json") + ) + id = self.client.get_cluster_id() + self.assertEqual(id, self.CLUSTER_ID) + + def _add_get_cluster_id_response(self, m, json_str): + url = "{0}/cluster".format(self._mock_url) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_cluster_id_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_cluster_id_response_failure(m) + id = self.client.get_cluster_id() + self.assertIsNone(id) + + def _add_get_cluster_id_response_failure(self, m): + url = "{0}/cluster".format(self._mock_url) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_retreive_cluster_capacity_metrics(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_retreive_cluster_capacity_metrics_response( + m, + self._getJsonFile( + "retreive_cluster_capacity_metrics_response.json") + ) + total, used = self.client.retreive_cluster_capacity_metrics( + self.CLUSTER_ID) + self.assertEqual(total, 47345047046144) + self.assertEqual(used, 366003363027) + + def _add_retreive_cluster_capacity_metrics_response(self, m, json_str): + url = "{0}/metrics/generate?order=timestamp".format(self._mock_url) + m.post(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_retreive_cluster_capacity_metrics_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_retreive_cluster_capacity_metrics_response_failure(m) + total, used = self.client.retreive_cluster_capacity_metrics( + self.CLUSTER_ID) + self.assertIsNone(total) + self.assertIsNone(used) + + def _add_retreive_cluster_capacity_metrics_response_failure(self, m): + url = "{0}/metrics/generate?order=timestamp".format(self._mock_url) + m.post(url, status_code=400) + + @requests_mock.mock() + def test_create_smb_share(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_smb_share_response( + m, self._getJsonFile("create_smb_share_response.json") + ) + id = self.client.create_smb_share(self.FILESYSTEM_ID, + self.SMB_SHARE_NAME) + self.assertEqual(id, self.SMB_SHARE_ID) + + def _add_create_smb_share_response(self, m, json_str): + url = "{0}/smb_share".format(self._mock_url) + m.post(url, status_code=201, json=json_str) + + @requests_mock.mock() + def test_create_smb_share_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_create_smb_share_response_failure(m) + id = self.client.create_smb_share(self.FILESYSTEM_ID, + self.SMB_SHARE_NAME) + self.assertIsNone(id) + + def _add_create_smb_share_response_failure(self, m): + url = "{0}/smb_share".format(self._mock_url) + m.post(url, status_code=400) + + @requests_mock.mock() + def test_get_fsid_from_share_name(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_fsid_from_share_name_response( + m, self.NFS_EXPORT_NAME, + self._getJsonFile("get_fsid_from_share_name_response.json") + ) + id = self.client.get_fsid_from_share_name(self.NFS_EXPORT_NAME) + self.assertEqual(id, self.FILESYSTEM_ID) + + def _add_get_fsid_from_share_name_response(self, m, name, json_str): + url = "{0}/smb_share?select=file_system_id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_fsid_from_share_name_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_fsid_from_share_name_response_failure( + m, self.SMB_SHARE_NAME + ) + id = self.client.get_fsid_from_share_name(self.SMB_SHARE_NAME) + self.assertIsNone(id) + + def _add_get_fsid_from_share_name_response_failure(self, m, name): + url = "{0}/smb_share?select=file_system_id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_get_smb_share_id(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_smb_share_id_response( + m, self.SMB_SHARE_NAME, + self._getJsonFile("get_smb_share_id_response.json") + ) + id = self.client.get_smb_share_id(self.SMB_SHARE_NAME) + self.assertEqual(id, self.SMB_SHARE_ID) + + def _add_get_smb_share_id_response(self, m, name, json_str): + url = "{0}/smb_share?select=id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_smb_share_id_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_smb_share_id_response_failure( + m, self.SMB_SHARE_NAME + ) + id = self.client.get_smb_share_id(self.SMB_SHARE_NAME) + self.assertIsNone(id) + + def _add_get_smb_share_id_response_failure(self, m, name): + url = "{0}/smb_share?select=id&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_get_nas_server_smb_netbios(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nas_server_smb_netbios_response( + m, self.SMB_SHARE_NAME, + self._getJsonFile("get_nas_server_smb_netbios_response.json") + ) + id = self.client.get_nas_server_smb_netbios(self.SMB_SHARE_NAME) + self.assertEqual(id, "OPENSTACK") + + def _add_get_nas_server_smb_netbios_response(self, m, name, json_str): + url = "{0}/nas_server?select=smb_servers" \ + "(is_standalone,netbios_name)&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=200, json=json_str) + + @requests_mock.mock() + def test_get_nas_server_smb_netbios_failure(self, m): + self.assertEqual(0, len(m.request_history)) + self._add_get_nas_server_smb_netbios_response_failure( + m, self.SMB_SHARE_NAME + ) + id = self.client.get_nas_server_smb_netbios(self.SMB_SHARE_NAME) + self.assertIsNone(id) + + def _add_get_nas_server_smb_netbios_response_failure(self, m, name): + url = "{0}/nas_server?select=smb_servers" \ + "(is_standalone,netbios_name)&name=eq.{1}".format( + self._mock_url, name + ) + m.get(url, status_code=400) + + @requests_mock.mock() + def test_set_acl(self, m): + + self.assertEqual(0, len(m.request_history)) + self._add_set_acl_response(m, self.SMB_SHARE_ID) + result = self.client.set_acl(self.SMB_SHARE_ID, + self.RW_USERS, + self.RO_USERS) + self.assertEqual(result, True) + + def _add_set_acl_response(self, m, share_id): + url = "{0}/smb_share/{1}/set_acl".format(self._mock_url, share_id) + m.post(url, status_code=204) diff --git a/manila/tests/share/drivers/dell_emc/plugins/powerstore/test_connection.py b/manila/tests/share/drivers/dell_emc/plugins/powerstore/test_connection.py new file mode 100644 index 0000000000..c3d3c982ec --- /dev/null +++ b/manila/tests/share/drivers/dell_emc/plugins/powerstore/test_connection.py @@ -0,0 +1,1013 @@ +# Copyright (c) 2023 Dell Inc. or its subsidiaries. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + + +from unittest import mock + +from oslo_log import log +from oslo_utils import units + +from manila.common import constants as const +from manila import exception +from manila.share.drivers.dell_emc.plugins.powerstore import connection +from manila import test + +LOG = log.getLogger(__name__) + + +class PowerStoreTest(test.TestCase): + """Unit test for the PowerStore Manila driver.""" + + REST_IP = "192.168.0.110" + NAS_SERVER_NAME = "powerstore-nasserver" + NAS_SERVER_ID = "6423d56e-eaf3-7424-be0b-1a9efb93188b" + NAS_SERVER_IP = "192.168.11.23" + SHARE_NAME = "powerstore-share" + SHARE_SIZE_GB = 3 + SHARE_NEW_SIZE_GB = 6 + FILESYSTEM_ID = "6454e9a9-a698-e9bc-ca61-1a9efb93188b" + NFS_EXPORT_ID = "6454ec18-7b8d-1532-1b8a-1a9efb93188b" + SMB_SHARE_ID = "64927ae9-3403-6930-a784-f227b9987c54" + RW_HOSTS = "192.168.1.10" + RO_HOSTS = "192.168.1.11" + RW_USERS = "user_1" + RO_USERS = "user_2" + SNAPSHOT_NAME = "powerstore-share-snap" + SNAPSHOT_ID = "6454ea29-09c3-030e-cfc3-1a9efb93188b" + CLONE_ID = "64560f05-e677-ec2a-7fcf-1a9efb93188b" + CLONE_NAME = "powerstore-nfs-share-snap-clone" + + class MockConfig(object): + def safe_get(self, value): + if value == "dell_nas_backend_host": + return "192.168.0.110" + elif value == "dell_nas_login": + return "admin" + elif value == "dell_nas_password": + return "pwd" + elif value == "dell_nas_server": + return "powerstore-nasserver" + elif value == "dell_ad_domain": + return "domain_name" + elif value == "dell_ssl_cert_verify": + return True + elif value == "dell_ssl_cert_path": + return "powerstore_cert_path" + + @mock.patch( + "manila.share.drivers.dell_emc.plugins.powerstore.client." + "PowerStoreClient", + autospec=True, + ) + def setUp(self, mock_powerstore_client): + super(PowerStoreTest, self).setUp() + + self._mock_powerstore_client = mock_powerstore_client.return_value + self.storage_connection = connection.PowerStoreStorageConnection(LOG) + + self.mock_context = mock.Mock("Context") + self.mock_emc_driver = mock.Mock("EmcDriver") + + self._mock_config = self.MockConfig() + self.mock_emc_driver.attach_mock(self._mock_config, "configuration") + self.storage_connection.connect( + self.mock_emc_driver, self.mock_context + ) + + def test_connect(self): + storage_connection = connection.PowerStoreStorageConnection(LOG) + + # execute method under test + storage_connection.connect(self.mock_emc_driver, self.mock_context) + + # verify connect sets driver params appropriately + mock_config = self.MockConfig() + server_addr = mock_config.safe_get("dell_nas_backend_host") + self.assertEqual(server_addr, storage_connection.rest_ip) + expected_username = mock_config.safe_get("dell_nas_login") + self.assertEqual(expected_username, storage_connection.rest_username) + expected_password = mock_config.safe_get("dell_nas_password") + self.assertEqual(expected_password, storage_connection.rest_password) + expected_nas_server = mock_config.safe_get("dell_nas_server") + self.assertEqual(expected_nas_server, storage_connection.nas_server) + expected_ad_domain = mock_config.safe_get("dell_ad_domain") + self.assertEqual(expected_ad_domain, storage_connection.ad_domain) + expected_verify_certificate = mock_config.safe_get( + "dell_ssl_cert_verify" + ) + self.assertEqual( + expected_verify_certificate, storage_connection.verify_certificate + ) + + def test_create_share_nfs(self): + self._mock_powerstore_client.get_nas_server_id.return_value = ( + self.NAS_SERVER_ID + ) + self._mock_powerstore_client.create_filesystem.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client.create_nfs_export.return_value = ( + self.NFS_EXPORT_ID + ) + self._mock_powerstore_client.get_nas_server_interfaces.return_value = ( + [{"ip": self.NAS_SERVER_IP, "preferred": True}] + ) + + self.assertFalse(self._mock_powerstore_client.get_nas_server_id.called) + self.assertFalse(self._mock_powerstore_client.create_filesystem.called) + self.assertFalse(self._mock_powerstore_client.create_nfs_export.called) + self.assertFalse( + self._mock_powerstore_client.get_nas_server_interfaces.called + ) + + # create the share + share = {"name": self.SHARE_NAME, "share_proto": "NFS", + "size": self.SHARE_SIZE_GB} + locations = self.storage_connection.create_share( + self.mock_context, + share, + None + ) + + # verify location and API call made + expected_locations = [ + {"path": "%s:/%s" % ( + self.NAS_SERVER_IP, + self.SHARE_NAME, + ), + "metadata": { + "preferred": True}}] + self.assertEqual(expected_locations, locations) + self._mock_powerstore_client.get_nas_server_id.assert_called_with( + self._mock_config.safe_get("dell_nas_server") + ) + self._mock_powerstore_client.create_filesystem.assert_called_with( + self.NAS_SERVER_ID, + self.SHARE_NAME, + self.SHARE_SIZE_GB * units.Gi, + ) + self._mock_powerstore_client.create_nfs_export.assert_called_with( + self.FILESYSTEM_ID, self.SHARE_NAME + ) + self._mock_powerstore_client.get_nas_server_interfaces. \ + assert_called_with( + self.NAS_SERVER_ID + ) + + def test_create_share_cifs(self): + self._mock_powerstore_client.get_nas_server_id.return_value = ( + self.NAS_SERVER_ID + ) + self._mock_powerstore_client.create_filesystem.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client.create_smb_share.return_value = ( + self.SMB_SHARE_ID + ) + self._mock_powerstore_client.get_nas_server_interfaces.return_value = ( + [{"ip": self.NAS_SERVER_IP, "preferred": True}] + ) + + self.assertFalse(self._mock_powerstore_client.get_nas_server_id.called) + self.assertFalse(self._mock_powerstore_client.create_filesystem.called) + self.assertFalse(self._mock_powerstore_client.create_smb_share.called) + self.assertFalse( + self._mock_powerstore_client.get_nas_server_interfaces.called + ) + + # create the share + share = {"name": self.SHARE_NAME, "share_proto": "CIFS", + "size": self.SHARE_SIZE_GB} + locations = self.storage_connection.create_share( + self.mock_context, + share, + None + ) + + # verify location and API call made + expected_locations = [ + {"path": "\\\\%s\\%s" % ( + self.NAS_SERVER_IP, + self.SHARE_NAME), + "metadata": { + "preferred": True}}] + self.assertEqual(expected_locations, locations) + self._mock_powerstore_client.get_nas_server_id.assert_called_with( + self._mock_config.safe_get("dell_nas_server") + ) + self._mock_powerstore_client.create_filesystem.assert_called_with( + self.NAS_SERVER_ID, + self.SHARE_NAME, + self.SHARE_SIZE_GB * units.Gi, + ) + self._mock_powerstore_client.create_smb_share.assert_called_with( + self.FILESYSTEM_ID, self.SHARE_NAME + ) + self._mock_powerstore_client.get_nas_server_interfaces. \ + assert_called_with( + self.NAS_SERVER_ID + ) + + def test_create_share_filesystem_id_not_found(self): + share = {"name": self.SHARE_NAME, "share_proto": "NFS", + "size": self.SHARE_SIZE_GB} + self._mock_powerstore_client.create_filesystem.return_value = None + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_share, + self.mock_context, + share, + share_server=None + ) + + def test_create_share_nfs_backend_failure(self): + share = {"name": self.SHARE_NAME, "share_proto": "NFS", + "size": self.SHARE_SIZE_GB} + self._mock_powerstore_client.create_nfs_export.return_value = None + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_share, + self.mock_context, + share, + share_server=None + ) + + def test_create_share_cifs_backend_failure(self): + share = {"name": self.SHARE_NAME, "share_proto": "CIFS", + "size": self.SHARE_SIZE_GB} + self._mock_powerstore_client.create_smb_share.return_value = None + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_share, + self.mock_context, + share, + share_server=None + ) + + def test_delete_share_nfs(self): + share = {"name": self.SHARE_NAME, "share_proto": "NFS"} + + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.FILESYSTEM_ID + ) + + self.assertFalse(self._mock_powerstore_client.get_filesystem_id.called) + self.assertFalse(self._mock_powerstore_client.delete_filesystem.called) + + # delete the share + self.storage_connection.delete_share(self.mock_context, share, None) + + # verify share delete + self._mock_powerstore_client.get_filesystem_id.assert_called_with( + self.SHARE_NAME + ) + self._mock_powerstore_client.delete_filesystem.assert_called_with( + self.FILESYSTEM_ID + ) + + def test_delete_nfs_share_backend_failure(self): + share = {"name": self.SHARE_NAME, "share_proto": "NFS"} + + self._mock_powerstore_client.delete_filesystem.return_value = False + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.delete_share, + self.mock_context, + share, + None, + ) + + def test_delete_nfs_share_share_does_not_exist(self): + self._mock_powerstore_client.get_filesystem_id.return_value = None + share = {"name": self.SHARE_NAME, "share_proto": "NFS"} + + # verify the calling delete on a non-existent share returns and does + # not throw exception + self.storage_connection.delete_share(self.mock_context, share, None) + self.assertTrue(self._mock_powerstore_client.get_filesystem_id.called) + self.assertFalse(self._mock_powerstore_client.delete_filesystem.called) + + def test_extend_share(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "NFS", + "size": self.SHARE_NEW_SIZE_GB, + } + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client.resize_filesystem.return_value = ( + True, None + ) + self.assertFalse(self._mock_powerstore_client.get_filesystem_id.called) + + self.storage_connection.extend_share(share, self.SHARE_NEW_SIZE_GB, + self.NAS_SERVER_NAME) + + self._mock_powerstore_client.get_filesystem_id.assert_called_with( + self.SHARE_NAME + ) + expected_quota_size = self.SHARE_NEW_SIZE_GB * units.Gi + self._mock_powerstore_client.resize_filesystem.assert_called_once_with( + self.FILESYSTEM_ID, expected_quota_size + ) + + def test_shrink_share(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "NFS", + "size": self.SHARE_SIZE_GB, + } + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client.resize_filesystem.return_value = ( + True, None + ) + self.assertFalse(self._mock_powerstore_client.get_filesystem_id.called) + + self.storage_connection.shrink_share(share, self.SHARE_NEW_SIZE_GB, + self.NAS_SERVER_NAME) + + self._mock_powerstore_client.get_filesystem_id.assert_called_with( + self.SHARE_NAME + ) + expected_quota_size = self.SHARE_NEW_SIZE_GB * units.Gi + self._mock_powerstore_client.resize_filesystem.assert_called_once_with( + self.FILESYSTEM_ID, expected_quota_size + ) + + def test_shrink_share_failure(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "NFS", + "size": self.SHARE_SIZE_GB, + "id": self.CLONE_ID + } + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client.resize_filesystem.return_value = ( + False, "msg" + ) + + self.assertRaises( + exception.ShareShrinkingPossibleDataLoss, + self.storage_connection.shrink_share, + share, + self.SHARE_NEW_SIZE_GB, + self.NAS_SERVER_NAME + ) + + def test_shrink_share_backend_failure(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "NFS", + "size": self.SHARE_SIZE_GB, + } + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client.resize_filesystem.return_value = ( + False, None + ) + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.shrink_share, + share, + self.SHARE_NEW_SIZE_GB, + self.NAS_SERVER_NAME + ) + + def test_update_access_add_nfs(self): + share = {"name": self.SHARE_NAME, "share_proto": "NFS"} + + self._mock_powerstore_client.get_nfs_export_id.return_value = ( + self.NFS_EXPORT_ID + ) + self._mock_powerstore_client.set_export_access.return_value = True + + self.assertFalse(self._mock_powerstore_client.get_nfs_export_id.called) + self.assertFalse(self._mock_powerstore_client.set_export_access.called) + + nfs_access_rw = { + "access_type": "ip", + "access_to": self.RW_HOSTS, + "access_level": const.ACCESS_LEVEL_RW, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + nfs_access_ro = { + "access_type": "ip", + "access_to": self.RO_HOSTS, + "access_level": const.ACCESS_LEVEL_RO, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + access_rules = [nfs_access_rw, nfs_access_ro] + + self.storage_connection.update_access( + self.mock_context, + share, + access_rules, + add_rules=None, + delete_rules=None, + share_server=None, + ) + + self._mock_powerstore_client.get_nfs_export_id.assert_called_once_with( + self.SHARE_NAME + ) + self._mock_powerstore_client.set_export_access.assert_called_once_with( + self.NFS_EXPORT_ID, {self.RW_HOSTS}, {self.RO_HOSTS} + ) + + def test_update_access_add_cifs(self): + share = {"name": self.SHARE_NAME, "share_proto": "CIFS"} + + self._mock_powerstore_client.get_smb_share_id.return_value = ( + self.SMB_SHARE_ID + ) + self._mock_powerstore_client.set_acl.return_value = True + + self.assertFalse(self._mock_powerstore_client.get_smb_share_id.called) + self.assertFalse(self._mock_powerstore_client.set_acl.called) + + cifs_access_rw = { + "access_type": "user", + "access_to": self.RW_USERS, + "access_level": const.ACCESS_LEVEL_RW, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + cifs_access_ro = { + "access_type": "user", + "access_to": self.RO_USERS, + "access_level": const.ACCESS_LEVEL_RO, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + access_rules = [cifs_access_rw, cifs_access_ro] + + self.storage_connection.update_access( + self.mock_context, + share, + access_rules, + add_rules=None, + delete_rules=None, + share_server=None, + ) + + self._mock_powerstore_client.get_smb_share_id.assert_called_once_with( + self.SHARE_NAME + ) + self._mock_powerstore_client.set_acl.assert_called_once_with( + self.SMB_SHARE_ID, {'domain_name\\user_1'}, {'domain_name\\user_2'} + ) + + def test_update_access_invalid_prefix(self): + share = {"name": self.SHARE_NAME, "share_proto": "CIFS"} + + self._mock_powerstore_client.get_smb_share_id.return_value = ( + self.SMB_SHARE_ID + ) + self._mock_powerstore_client.get_nas_server_smb_netbios. \ + return_value = None + + self.assertFalse(self._mock_powerstore_client.get_smb_share_id.called) + self.assertFalse(self._mock_powerstore_client.set_acl.called) + + cifs_access_rw = { + "access_type": "user", + "access_to": self.RW_USERS, + "access_level": const.ACCESS_LEVEL_RW, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + cifs_access_ro = { + "access_type": "user", + "access_to": self.RO_USERS, + "access_level": const.ACCESS_LEVEL_RO, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + access_rules = [cifs_access_rw, cifs_access_ro] + + self.storage_connection.ad_domain = None + + access_updates = self.storage_connection.update_access( + self.mock_context, + share, + access_rules, + add_rules=None, + delete_rules=None, + share_server=None, + ) + + self._mock_powerstore_client.set_acl.assert_called_once_with( + self.SMB_SHARE_ID, set(), set() + ) + + self.assertIsNotNone(access_updates) + + def test_update_access_add_nfs_invalid_acess_type(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "NFS", + "display_name": "foo_display_name", + } + + nfs_access_rw = { + "access_type": "invalid_type", + "access_to": self.RW_HOSTS, + "access_level": const.ACCESS_LEVEL_RW, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + nfs_access_ro = { + "access_type": "invalid_type", + "access_to": self.RO_HOSTS, + "access_level": const.ACCESS_LEVEL_RO, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd09", + } + access_rules = [nfs_access_rw, nfs_access_ro] + + self._mock_powerstore_client.get_nfs_export_id.return_value = ( + self.NFS_EXPORT_ID + ) + + access_updates = self.storage_connection.update_access( + self.mock_context, + share, + access_rules, + add_rules=None, + delete_rules=None, + share_server=None, + ) + + self._mock_powerstore_client.set_export_access.assert_called_once_with( + self.NFS_EXPORT_ID, set(), set() + ) + + self.assertIsNotNone(access_updates) + + def test_update_access_add_cifs_invalid_acess_type(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "CIFS", + "display_name": "foo_display_name", + } + + cifs_access_rw = { + "access_type": "invalid_type", + "access_to": self.RW_USERS, + "access_level": const.ACCESS_LEVEL_RW, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + cifs_access_ro = { + "access_type": "invalid_type", + "access_to": self.RO_USERS, + "access_level": const.ACCESS_LEVEL_RO, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd09", + } + access_rules = [cifs_access_rw, cifs_access_ro] + + self._mock_powerstore_client.get_smb_share_id.return_value = ( + self.SMB_SHARE_ID + ) + + access_updates = self.storage_connection.update_access( + self.mock_context, + share, + access_rules, + add_rules=None, + delete_rules=None, + share_server=None, + ) + + self._mock_powerstore_client.set_acl.assert_called_once_with( + self.SMB_SHARE_ID, set(), set() + ) + + self.assertIsNotNone(access_updates) + + def test_update_access_add_nfs_backend_failure(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "NFS", + "display_name": "foo_display_name", + } + + self._mock_powerstore_client.get_nfs_export_id.return_value = ( + self.NFS_EXPORT_ID + ) + self._mock_powerstore_client.set_export_access.return_value = False + + self.assertFalse(self._mock_powerstore_client.get_nfs_export_id.called) + self.assertFalse(self._mock_powerstore_client.set_export_access.called) + + nfs_access_rw = { + "access_type": "ip", + "access_to": self.RW_HOSTS, + "access_level": const.ACCESS_LEVEL_RW, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + nfs_access_ro = { + "access_type": "ip", + "access_to": self.RO_HOSTS, + "access_level": const.ACCESS_LEVEL_RO, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + access_rules = [nfs_access_rw, nfs_access_ro] + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.update_access, + self.mock_context, + share, + access_rules, + add_rules=None, + delete_rules=None, + share_server=None, + ) + + def test_update_access_add_cifs_backend_failure(self): + share = { + "name": self.SHARE_NAME, + "share_proto": "CIFS", + "display_name": "foo_display_name", + } + + self._mock_powerstore_client.set_acl.return_value = False + + cifs_access_rw = { + "access_type": "user", + "access_to": self.RW_USERS, + "access_level": const.ACCESS_LEVEL_RW, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + cifs_access_ro = { + "access_type": "user", + "access_to": self.RO_USERS, + "access_level": const.ACCESS_LEVEL_RO, + "access_id": "09960614-8574-4e03-89cf-7cf267b0bd08", + } + access_rules = [cifs_access_rw, cifs_access_ro] + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.update_access, + self.mock_context, + share, + access_rules, + add_rules=None, + delete_rules=None, + share_server=None, + ) + + def test_allow_access(self): + self.assertRaises( + NotImplementedError, + self.storage_connection.allow_access, + self.mock_context, + share=None, + access=None, + share_server=None, + ) + + def test_deny_access(self): + self.assertRaises( + NotImplementedError, + self.storage_connection.deny_access, + self.mock_context, + share=None, + access=None, + share_server=None, + ) + + def test_update_share_stats(self): + data = dict( + share_backend_name='powerstore', + vendor_name='Dell EMC', + storage_protocol='NFS_CIFS', + snapshot_support=True, + create_share_from_snapshot_support=True) + self._mock_powerstore_client.get_cluster_id.return_value = "0" + self._mock_powerstore_client. \ + retreive_cluster_capacity_metrics.return_value = \ + 47345047046144, 366003363027 + self.storage_connection.update_share_stats(data) + self.assertEqual(data['storage_protocol'], 'NFS_CIFS') + self.assertEqual(data['driver_version'], connection.VERSION) + self.assertEqual(data['total_capacity_gb'], 44093) + self.assertEqual(data['free_capacity_gb'], 43752) + + def test_update_share_stats_failure(self): + data = dict( + share_backend_name='powerstore', + vendor_name='Dell EMC', + storage_protocol='NFS_CIFS', + snapshot_support=True, + create_share_from_snapshot_support=True) + self._mock_powerstore_client. \ + retreive_cluster_capacity_metrics.return_value = \ + None, None + self.storage_connection.update_share_stats(data) + self.assertIsNone(data.get('total_capacity_gb')) + self.assertIsNone(data.get('free_capacity_gb')) + + def test_create_snapshot(self): + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client. \ + create_snapshot.return_value = self.SNAPSHOT_ID + + snapshot = { + "name": self.SNAPSHOT_NAME, + "share_name": self.SHARE_NAME + } + self.storage_connection.create_snapshot( + self.mock_context, snapshot, None + ) + + self._mock_powerstore_client.get_filesystem_id. \ + assert_called_with( + self.SHARE_NAME + ) + self._mock_powerstore_client.create_snapshot.assert_called_with( + self.FILESYSTEM_ID, self.SNAPSHOT_NAME + ) + + def test_create_snapshot_invalid_filesystem_id(self): + self._mock_powerstore_client.get_filesystem_id.return_value = ( + None + ) + + snapshot = { + "name": self.SNAPSHOT_NAME, + "share_name": self.SHARE_NAME + } + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_snapshot, + self.mock_context, + snapshot, + None + ) + + def test_create_snapshot_backend_failure(self): + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.FILESYSTEM_ID + ) + self._mock_powerstore_client. \ + create_snapshot.return_value = None + + snapshot = { + "name": self.SNAPSHOT_NAME, + "share_name": self.SHARE_NAME, + "share": { + "share_proto": "NFS" + } + } + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_snapshot, + self.mock_context, + snapshot, + None + ) + + def test_delete_snapshot(self): + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.SNAPSHOT_ID + ) + self._mock_powerstore_client.delete_filesystem.return_value = True + + snapshot = { + "name": self.SNAPSHOT_NAME, + "share_name": self.SHARE_NAME + } + self.storage_connection.delete_snapshot( + self.mock_context, snapshot, None + ) + + self._mock_powerstore_client.get_filesystem_id. \ + assert_called_with( + self.SNAPSHOT_NAME + ) + self._mock_powerstore_client.delete_filesystem.assert_called_with( + self.SNAPSHOT_ID + ) + + def test_delete_snapshot_backend_failure(self): + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.SNAPSHOT_ID + ) + self._mock_powerstore_client.delete_filesystem.return_value = False + + snapshot = { + "name": self.SNAPSHOT_NAME, + "share_name": self.SHARE_NAME + } + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.delete_snapshot, + self.mock_context, + snapshot, + None + ) + + def test_revert_to_snapshot(self): + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.SNAPSHOT_ID + ) + self._mock_powerstore_client.restore_snapshot.return_value = True + + snapshot = { + "name": self.SNAPSHOT_NAME, + "share_name": self.SHARE_NAME + } + self.storage_connection.revert_to_snapshot( + self.mock_context, snapshot, None, None, None + ) + + self._mock_powerstore_client.get_filesystem_id. \ + assert_called_with( + self.SNAPSHOT_NAME + ) + self._mock_powerstore_client.restore_snapshot.assert_called_with( + self.SNAPSHOT_ID + ) + + def test_revert_to_snapshot_backend_failure(self): + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.SNAPSHOT_ID + ) + self._mock_powerstore_client.restore_snapshot.return_value = False + + snapshot = { + "name": self.SNAPSHOT_NAME, + "share_name": self.SHARE_NAME + } + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.revert_to_snapshot, + self.mock_context, + snapshot, + None, None, None + ) + + def test_create_share_from_snapshot_nfs(self): + self._mock_powerstore_client.get_nas_server_id.return_value = ( + self.NAS_SERVER_ID + ) + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.SNAPSHOT_ID + ) + self._mock_powerstore_client.clone_snapshot.return_value = ( + self.CLONE_ID + ) + self._mock_powerstore_client.create_nfs_export.return_value = ( + self.NFS_EXPORT_ID + ) + self._mock_powerstore_client.get_nas_server_interfaces.return_value = ( + [{"ip": self.NAS_SERVER_IP, "preferred": True}] + ) + self._mock_powerstore_client.resize_filesystem.return_value = ( + True, None + ) + share = {"name": self.SHARE_NAME, "share_proto": "NFS", + "size": self.SHARE_NEW_SIZE_GB} + snapshot = {"name": self.SNAPSHOT_NAME, "size": self.SHARE_SIZE_GB} + locations = self.storage_connection.create_share_from_snapshot( + self.mock_context, + share, + snapshot + ) + expected_locations = [ + {"path": "%s:/%s" % ( + self.NAS_SERVER_IP, + self.SHARE_NAME, + ), + "metadata": { + "preferred": True}}] + self.assertEqual(expected_locations, locations) + self._mock_powerstore_client.get_nas_server_id.assert_called_with( + self._mock_config.safe_get("dell_nas_server") + ) + self._mock_powerstore_client.clone_snapshot.assert_called_with( + self.SNAPSHOT_ID, + self.SHARE_NAME + ) + self._mock_powerstore_client.create_nfs_export.assert_called_with( + self.CLONE_ID, + self.SHARE_NAME + ) + self._mock_powerstore_client.get_nas_server_interfaces. \ + assert_called_with( + self.NAS_SERVER_ID + ) + + def test_create_share_from_snapshot_cifs(self): + self._mock_powerstore_client.get_nas_server_id.return_value = ( + self.NAS_SERVER_ID + ) + self._mock_powerstore_client.get_filesystem_id.return_value = ( + self.SNAPSHOT_ID + ) + self._mock_powerstore_client.clone_snapshot.return_value = ( + self.CLONE_ID + ) + self._mock_powerstore_client.create_smb_share.return_value = ( + self.NFS_EXPORT_ID + ) + self._mock_powerstore_client.get_nas_server_interfaces.return_value = ( + [{"ip": self.NAS_SERVER_IP, "preferred": True}] + ) + self._mock_powerstore_client.resize_filesystem.return_value = ( + True, None + ) + + share = {"name": self.SHARE_NAME, "share_proto": "CIFS", + "size": self.SHARE_NEW_SIZE_GB} + snapshot = {"name": self.SNAPSHOT_NAME, "size": self.SHARE_SIZE_GB} + locations = self.storage_connection.create_share_from_snapshot( + self.mock_context, + share, + snapshot + ) + expected_locations = [ + {"path": "\\\\%s\\%s" % ( + self.NAS_SERVER_IP, + self.SHARE_NAME), + "metadata": { + "preferred": True}}] + self.assertEqual(expected_locations, locations) + self._mock_powerstore_client.get_nas_server_id.assert_called_with( + self._mock_config.safe_get("dell_nas_server") + ) + self._mock_powerstore_client.clone_snapshot.assert_called_with( + self.SNAPSHOT_ID, + self.SHARE_NAME + ) + self._mock_powerstore_client.create_smb_share.assert_called_with( + self.CLONE_ID, + self.SHARE_NAME + ) + self._mock_powerstore_client.get_nas_server_interfaces. \ + assert_called_with( + self.NAS_SERVER_ID + ) + + def test_create_share_from_snapshot_clone_failure(self): + share = {"name": self.SHARE_NAME, "share_proto": "NFS"} + snapshot = {"name": self.SNAPSHOT_NAME} + self._mock_powerstore_client.clone_snapshot.return_value = None + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_share_from_snapshot, + self.mock_context, + share, + snapshot + ) + + def test_create_share_from_snapshot_export_failure(self): + share = {"name": self.SHARE_NAME, "share_proto": "NFS"} + snapshot = {"name": self.SNAPSHOT_NAME} + self._mock_powerstore_client.create_nfs_export.return_value = None + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_share_from_snapshot, + self.mock_context, + share, + snapshot + ) + + def test_create_share_from_snapshot_share_failure(self): + share = {"name": self.SHARE_NAME, "share_proto": "CIFS"} + snapshot = {"name": self.SNAPSHOT_NAME} + self._mock_powerstore_client.create_smb_share.return_value = None + + self.assertRaises( + exception.ShareBackendException, + self.storage_connection.create_share_from_snapshot, + self.mock_context, + share, + snapshot + ) + + def test_get_default_filter_function(self): + filter = self.storage_connection.get_default_filter_function() + self.assertEqual(filter, "share.size >= 3") diff --git a/manila/tests/share/drivers/dell_emc/test_driver.py b/manila/tests/share/drivers/dell_emc/test_driver.py index b72ec4e4e0..a5ee348f4d 100644 --- a/manila/tests/share/drivers/dell_emc/test_driver.py +++ b/manila/tests/share/drivers/dell_emc/test_driver.py @@ -65,14 +65,12 @@ class FakeConnection(base.StorageConnection): def connect(self, emc_share_driver, context): """Any initialization the share driver does while starting.""" - raise NotImplementedError() def update_share_stats(self, stats_dict): """Add key/values to stats_dict.""" def get_network_allocations_number(self): """Returns number of network allocations for creating VIFs.""" - return 0 def setup_server(self, network_info, metadata=None): """Set up and configures share server with given network parameters.""" @@ -81,7 +79,23 @@ class FakeConnection(base.StorageConnection): """Teardown share server.""" +class FakeConnection_vmax(FakeConnection): + def __init__(self, *args, **kwargs): + self.dhss_mandatory_security_service_association = {} + self.revert_to_snap_support = False + self.shrink_share_support = False + self.manage_existing_support = False + self.manage_existing_with_server_support = False + self.manage_existing_snapshot_support = False + self.manage_snapshot_with_server_support = False + self.manage_server_support = False + self.get_share_server_network_info_support = False + pass + + FAKE_BACKEND = 'fake_backend' +FAKE_BACKEND_VMAX = 'vmax' +FAKE_BACKEND_POWERMAX = 'powermax' class FakeEMCExtensionManager(object): @@ -92,6 +106,11 @@ class FakeEMCExtensionManager(object): plugin=FakeConnection, entry_point=None, obj=None)) + self.extensions.append( + extension.Extension(name=FAKE_BACKEND_POWERMAX, + plugin=FakeConnection_vmax, + entry_point=None, + obj=None)) class EMCShareFrameworkTestCase(test.TestCase): @@ -107,6 +126,15 @@ class EMCShareFrameworkTestCase(test.TestCase): self.driver = emcdriver.EMCShareDriver( configuration=self.configuration) + self.configuration_vmax = conf.Configuration(None) + self.configuration_vmax.append_config_values = \ + mock.Mock(return_value=0) + self.configuration_vmax.share_backend_name = FAKE_BACKEND_VMAX + self.mock_object(self.configuration_vmax, 'safe_get', + self._fake_safe_get_vmax) + self.driver_vmax = emcdriver.EMCShareDriver( + configuration=self.configuration_vmax) + def test_driver_setup(self): FakeConnection.connect = mock.Mock() self.driver.do_setup(None) @@ -157,6 +185,13 @@ class EMCShareFrameworkTestCase(test.TestCase): return True return None + def _fake_safe_get_vmax(self, value): + if value in ['emc_share_backend', 'share_backend_name']: + return FAKE_BACKEND_VMAX + elif value == 'driver_handles_share_servers': + return True + return None + def test_support_manage(self): share = mock.Mock() driver_options = mock.Mock() @@ -179,6 +214,33 @@ class EMCShareFrameworkTestCase(test.TestCase): share_server) self.driver.manage_server(context, share_server, identifier, driver_options) + self.driver.get_share_server_network_info_support = True + self.driver.get_share_server_network_info(context, share_server, + identifier, driver_options) + self.driver.create_share(context, share, share_server) + self.driver.create_share_from_snapshot(context, share, snapshot, + share_server) + self.driver.extend_share(share, 20, share_server) + self.driver.shrink_share_support = True + self.driver.shrink_share(share, 20, share_server) + self.driver.create_snapshot(context, snapshot, share_server) + self.driver.delete_share(context, share, share_server) + self.driver.delete_snapshot(context, snapshot, share_server) + self.driver.ensure_share(context, share, share_server) + access = mock.Mock() + self.driver.allow_access(context, share, access, share_server) + self.driver.deny_access(context, share, access, share_server) + self.driver.update_access(context, share, None, None, share_server) + self.driver.check_for_setup_error() + self.driver.get_network_allocations_number() + self.driver._teardown_server(None) + self.driver.revert_to_snap_support = True + share_access_rules = mock.Mock() + snapshot_access_rules = mock.Mock() + self.driver.revert_to_snapshot(context, snapshot, share_access_rules, + snapshot_access_rules, share_server) + self.driver.ipv6_implemented = False + self.driver.get_configured_ip_versions() def test_not_support_manage(self): share = mock.Mock() @@ -200,6 +262,20 @@ class EMCShareFrameworkTestCase(test.TestCase): result = self.driver.manage_server(None, share_server, identifier, driver_options) self.assertIsInstance(result, NotImplementedError) + result = self.driver.get_share_server_network_info(None, + share_server, + identifier, + driver_options) + self.assertIsInstance(result, NotImplementedError) + + self.assertRaises(NotImplementedError, self.driver.shrink_share, share, + 20, share_server) + + share_access_rules = mock.Mock() + snapshot_access_rules = mock.Mock() + self.assertRaises(NotImplementedError, self.driver.revert_to_snapshot, + None, snapshot, share_access_rules, + snapshot_access_rules, share_server) def test_unmanage_manage(self): share = mock.Mock() diff --git a/releasenotes/notes/bp-dell-powerstore-manila-driver-263489b0d0b10e2e.yaml b/releasenotes/notes/bp-dell-powerstore-manila-driver-263489b0d0b10e2e.yaml new file mode 100644 index 0000000000..9a025ffc61 --- /dev/null +++ b/releasenotes/notes/bp-dell-powerstore-manila-driver-263489b0d0b10e2e.yaml @@ -0,0 +1,5 @@ +--- +features: + - | + Added a new Manila driver to support Dell PowerStore storage backend. + It supports NFS and CIFS shares operations, and snapshot operations. diff --git a/setup.cfg b/setup.cfg index a469e62bf3..52e802c115 100644 --- a/setup.cfg +++ b/setup.cfg @@ -83,6 +83,7 @@ manila.share.drivers.dell_emc.plugins = unity = manila.share.drivers.dell_emc.plugins.unity.connection:UnityStorageConnection isilon = manila.share.drivers.dell_emc.plugins.isilon.isilon:IsilonStorageConnection powermax = manila.share.drivers.dell_emc.plugins.powermax.connection:PowerMaxStorageConnection + powerstore = manila.share.drivers.dell_emc.plugins.powerstore.connection:PowerStoreStorageConnection manila.tests.scheduler.fakes = FakeWeigher1 = manila.tests.scheduler.fakes:FakeWeigher1 FakeWeigher2 = manila.tests.scheduler.fakes:FakeWeigher2