fix use of source value in mongdb driver

Change-Id: I00b3c1c8af7b154516fea4ddb3f588ce2df5e46c
Signed-off-by: Doug Hellmann <doug.hellmann@dreamhost.com>
This commit is contained in:
Doug Hellmann 2012-07-26 15:39:57 -04:00
parent 2fe0a3c3ef
commit ab1437fbbc
2 changed files with 54 additions and 15 deletions

View File

@ -230,6 +230,7 @@ class Connection(base.Connection):
# last updated. # last updated.
'timestamp': timestamp, 'timestamp': timestamp,
'metadata': data['resource_metadata'], 'metadata': data['resource_metadata'],
'source': data['source'],
}, },
'$addToSet': {'meter': {'counter_name': data['counter_name'], '$addToSet': {'meter': {'counter_name': data['counter_name'],
'counter_type': data['counter_type'], 'counter_type': data['counter_type'],
@ -248,9 +249,11 @@ class Connection(base.Connection):
:param source: Optional source filter. :param source: Optional source filter.
""" """
q = {}
if source is not None: if source is not None:
q['source'] = source q = {'source': source,
}
return self.db.user.find(q).distinct('_id')
else:
return self.db.user.distinct('_id') return self.db.user.distinct('_id')
def get_projects(self, source=None): def get_projects(self, source=None):
@ -258,9 +261,11 @@ class Connection(base.Connection):
:param source: Optional source filter. :param source: Optional source filter.
""" """
q = {}
if source is not None: if source is not None:
q['source'] = source q = {'source': source,
}
return self.db.project.find(q).distinct('_id')
else:
return self.db.project.distinct('_id') return self.db.project.distinct('_id')
def get_resources(self, user=None, project=None, source=None): def get_resources(self, user=None, project=None, source=None):

View File

@ -97,7 +97,7 @@ class MongoDBEngineTestBase(unittest.TestCase):
self.conn.db = self.db self.conn.db = self.db
self.counter = counter.Counter( self.counter = counter.Counter(
'test', 'test-1',
'instance', 'instance',
'cumulative', 'cumulative',
1, 1,
@ -114,7 +114,7 @@ class MongoDBEngineTestBase(unittest.TestCase):
self.conn.record_metering_data(self.msg) self.conn.record_metering_data(self.msg)
self.counter2 = counter.Counter( self.counter2 = counter.Counter(
'test', 'test-2',
'instance', 'instance',
'cumulative', 'cumulative',
1, 1,
@ -130,6 +130,23 @@ class MongoDBEngineTestBase(unittest.TestCase):
self.msg2 = meter.meter_message_from_counter(self.counter2) self.msg2 = meter.meter_message_from_counter(self.counter2)
self.conn.record_metering_data(self.msg2) self.conn.record_metering_data(self.msg2)
self.counter3 = counter.Counter(
'test-3',
'instance',
'cumulative',
1,
'user-id-alternate',
'project-id',
'resource-id-alternate',
timestamp=datetime.datetime(2012, 7, 2, 10, 41),
duration=0,
resource_metadata={'display_name': 'test-server',
'tag': 'self.counter3',
}
)
self.msg3 = meter.meter_message_from_counter(self.counter3)
self.conn.record_metering_data(self.msg3)
for i in range(2, 4): for i in range(2, 4):
c = counter.Counter( c = counter.Counter(
'test', 'test',
@ -158,11 +175,16 @@ class UserTest(MongoDBEngineTestBase):
def test_new_user_source(self): def test_new_user_source(self):
user = self.db.user.find_one({'_id': 'user-id'}) user = self.db.user.find_one({'_id': 'user-id'})
assert 'source' in user assert 'source' in user
assert user['source'] == ['test'] assert user['source'] == ['test-1', 'test-2']
def test_get_users(self): def test_get_users(self):
users = self.conn.get_users() users = self.conn.get_users()
assert set(users) == set(['user-id', 'user-id-2', 'user-id-3']) assert set(users) == set(['user-id', 'user-id-alternate', 'user-id-2', 'user-id-3'])
def test_get_users_by_source(self):
users = list(self.conn.get_users(source='test-1'))
assert len(users) == 1
assert users == ['user-id']
class ProjectTest(MongoDBEngineTestBase): class ProjectTest(MongoDBEngineTestBase):
@ -174,13 +196,18 @@ class ProjectTest(MongoDBEngineTestBase):
def test_new_project_source(self): def test_new_project_source(self):
project = self.db.project.find_one({'_id': 'project-id'}) project = self.db.project.find_one({'_id': 'project-id'})
assert 'source' in project assert 'source' in project
assert project['source'] == ['test'] assert project['source'] == ['test-1', 'test-2', 'test-3']
def test_get_projects(self): def test_get_projects(self):
projects = self.conn.get_projects() projects = self.conn.get_projects()
expected = set(['project-id', 'project-id-2', 'project-id-3']) expected = set(['project-id', 'project-id-2', 'project-id-3'])
assert set(projects) == expected assert set(projects) == expected
def test_get_projects_by_source(self):
projects = self.conn.get_projects(source='test-1')
expected = ['project-id']
assert projects == expected
class ResourceTest(MongoDBEngineTestBase): class ResourceTest(MongoDBEngineTestBase):
@ -226,11 +253,18 @@ class ResourceTest(MongoDBEngineTestBase):
else: else:
assert False, 'Never found resource-id' assert False, 'Never found resource-id'
def test_get_resources_by_source(self):
resources = list(self.conn.get_resources(source='test-1'))
assert len(resources) == 1
ids = set(r['resource_id'] for r in resources)
assert ids == set(['resource-id'])
def test_get_resources_by_user(self): def test_get_resources_by_user(self):
resources = list(self.conn.get_resources(user='user-id')) resources = list(self.conn.get_resources(user='user-id'))
assert len(resources) == 2 num_resources = len(resources)
assert num_resources == 1
ids = set(r['resource_id'] for r in resources) ids = set(r['resource_id'] for r in resources)
assert ids == set(['resource-id', 'resource-id-alternate']) assert ids == set(['resource-id'])
def test_get_resources_by_project(self): def test_get_resources_by_project(self):
resources = list(self.conn.get_resources(project='project-id')) resources = list(self.conn.get_resources(project='project-id'))
@ -257,7 +291,7 @@ class MeterTest(MongoDBEngineTestBase):
results = list(self.conn.get_raw_events(f)) results = list(self.conn.get_raw_events(f))
assert results assert results
for meter in results: for meter in results:
assert meter in [self.msg, self.msg2] assert meter in [self.msg, self.msg2, self.msg3]
def test_get_raw_events_by_resource(self): def test_get_raw_events_by_resource(self):
f = storage.EventFilter(user='user-id', resource='resource-id') f = storage.EventFilter(user='user-id', resource='resource-id')
@ -341,7 +375,7 @@ class SumTest(MongoDBEngineTestBase):
counts = dict((r['resource_id'], r['value']) counts = dict((r['resource_id'], r['value'])
for r in results) for r in results)
assert counts['resource-id'] == 1 assert counts['resource-id'] == 1
assert counts['resource-id-alternate'] == 1 assert counts['resource-id-alternate'] == 2
assert set(counts.keys()) == set(['resource-id', assert set(counts.keys()) == set(['resource-id',
'resource-id-alternate']) 'resource-id-alternate'])