'Retrieve Volume Stats from Datanode.'

def _fetch_volume_status(self):

    LOG.debug('Request    Volume    Stats    from    Datanode')
    data = {}
    data['volume_backend_name'] = 'Veritas_HyperScale'
    data['vendor_name'] = 'Veritas    Technologies    LLC'
    data['driver_version'] = self.VERSION
    data['storage_protocol'] = 'nfs'
    data['total_capacity_gb'] = 0.0
    data['free_capacity_gb'] = 0.0
    data['reserved_percentage'] = self.configuration.reserved_percentage
    data['QoS_support'] = False
    try:
        message_body = {}
        (cmd_out, cmd_error) = util.message_data_plane(self.dn_routing_key, 'hyperscale.storage.dm.discover.stats', **message_body)
        LOG.debug('Response    Message    from    Datanode:    %s', cmd_out)
        payload = cmd_out.get('payload')
        if ('stats' in payload.keys()):
            if ('total_capacity' in payload.get('stats')[0].keys()):
                total_capacity = payload.get('stats')[0]['total_capacity']
            if ('free_capacity' in payload.get('stats')[0].keys()):
                free_capacity = payload.get('stats')[0]['free_capacity']
            if (total_capacity is not None):
                data['total_capacity_gb'] = float(total_capacity)
                data['free_capacity_gb'] = float(free_capacity)
    except (exception.UnableToExecuteHyperScaleCmd, exception.UnableToProcessHyperScaleCmdOutput):
        with excutils.save_and_reraise_exception():
            LOG.exception('Exception    during    fetch    stats')
    return data
