'Return an iterable of models.Meter instances
:param user: Optional ID for user that owns the resource.
:param project: Optional ID for project that owns the resource.
:param resource: Optional resource filter.
:param source: Optional source filter.
:param metaquery: Optional dict with metadata to match on.
:param limit: Maximum number of results to return.
:param unique: If set to true, return only unique meter information.'

def get_meters(self, user=None, project=None, resource=None, source=None, metaquery=None, limit=None, unique=False):

    if (limit == 0):
        return
    metaquery = (metaquery or {})
    with self.conn_pool.connection() as conn:
        resource_table = conn.table(self.RESOURCE_TABLE)
        q = hbase_utils.make_query(metaquery=metaquery, user_id=user, project_id=project, resource_id=resource, source=source)
        LOG.debug('Query    Resource    table:    %s', q)
        gen = resource_table.scan(filter=q)
        result = set()
        for (ignored, data) in gen:
            (flatten_result, meters, md) = hbase_utils.deserialize_entry(data)
            for m in meters:
                if (limit and (len(result) >= limit)):
                    return
                (_m_rts, m_source, name, m_type, unit) = m[0]
                if unique:
                    meter_dict = {'name': name, 'type': m_type, 'unit': unit, 'resource_id': None, 'project_id': None, 'user_id': None, 'source': None}
                else:
                    meter_dict = {'name': name, 'type': m_type, 'unit': unit, 'resource_id': flatten_result['resource_id'], 'project_id': flatten_result['project_id'], 'user_id': flatten_result['user_id']}
                frozen_meter = frozenset(meter_dict.items())
                if (frozen_meter in result):
                    continue
                result.add(frozen_meter)
                if (not unique):
                    meter_dict.update({'source': (m_source if m_source else None)})
                (yield models.Meter(**meter_dict))
