diff --git a/marconi/storage/mongodb/controllers.py b/marconi/storage/mongodb/controllers.py index 1ac75f9c7..b333cebe0 100644 --- a/marconi/storage/mongodb/controllers.py +++ b/marconi/storage/mongodb/controllers.py @@ -96,16 +96,14 @@ class QueueController(storage.QueueBase): def stats(self, name, tenant=None): qid = self.get_id(name, tenant) msg_ctrl = self.driver.message_controller - total = msg_ctrl.all().count() - active = msg_ctrl.active(qid).count() + active = msg_ctrl.active(qid) claimed = msg_ctrl.claimed(qid) return { "actions": 0, "messages": { - "total": total, - "expired": total - active, "claimed": claimed.count(), + "free": active.count(), } } diff --git a/marconi/storage/sqlite/controllers.py b/marconi/storage/sqlite/controllers.py index 9a51e09a1..3b28bd33b 100644 --- a/marconi/storage/sqlite/controllers.py +++ b/marconi/storage/sqlite/controllers.py @@ -73,27 +73,25 @@ class Queue(base.QueueBase): def stats(self, name, tenant): with self.driver('deferred'): qid = _get_qid(self.driver, name, tenant) - total, expired, claimed = self.driver.get(''' + claimed, free = self.driver.get(''' select * from - (select count(id) - from Messages - where qid = ?), - (select count(id) - from Messages - where ttl <= julianday() * 86400.0 - created - and qid = ?), (select count(msgid) from Claims join Locked on id = cid where ttl > julianday() * 86400.0 - created + and qid = ?), + (select count(id) + from Messages left join Locked + on id = msgid + where msgid is null + and ttl > julianday() * 86400.0 - created and qid = ?) - ''', qid, qid, qid) + ''', qid, qid) return { 'messages': { 'claimed': claimed, - 'expired': expired, - 'total': total, + 'free': free, }, 'actions': 0, } diff --git a/marconi/tests/storage/base.py b/marconi/tests/storage/base.py index 0bc647d92..820bdef30 100644 --- a/marconi/tests/storage/base.py +++ b/marconi/tests/storage/base.py @@ -88,7 +88,7 @@ class QueueControllerTest(ControllerBaseTest): tenant=self.tenant, client_uuid="my_uuid", num=12) countof = self.controller.stats("test", tenant=self.tenant) - self.assertEqual(countof['messages']['total'], 12) + self.assertEqual(countof['messages']['free'], 12) # Test Queue Deletion self.controller.delete("test", tenant=self.tenant) @@ -217,6 +217,12 @@ class ClaimControllerTest(ControllerBaseTest): messages = list(messages) self.assertEquals(len(messages), 15) + # Ensure Queue stats + countof = self.queue_controller.stats(self.queue_name, + tenant=self.tenant) + self.assertEqual(countof['messages']['claimed'], 15) + self.assertEqual(countof['messages']['free'], 5) + # Make sure get works claim, messages2 = self.controller.get(self.queue_name, claim_id, tenant=self.tenant) diff --git a/marconi/tests/test_sqlite.py b/marconi/tests/test_sqlite.py index f83f5d6a4..87f655cdd 100644 --- a/marconi/tests/test_sqlite.py +++ b/marconi/tests/test_sqlite.py @@ -64,7 +64,7 @@ class TestSqlite(testing.TestBase): # ensure the message counts countof = self.queue_ctrl.stats('fizbit', '480924') - self.assertEquals(countof['messages']['total'], 11) + self.assertEquals(countof['messages']['free'], 1) self.assertEquals(countof['messages']['claimed'], 10) # claim a message @@ -113,7 +113,7 @@ class TestSqlite(testing.TestBase): self.msg_ctrl.get('fizbit', msgid, '480924') countof = self.queue_ctrl.stats('fizbit', '480924') - self.assertEquals(countof['messages']['expired'], 1) + self.assertEquals(countof['messages']['free'], 0) #TODO(zyuan): move this to tests/storage/test_impl_sqlite.py def test_illformed_id(self): diff --git a/marconi/tests/transport/wsgi/test_messages.py b/marconi/tests/transport/wsgi/test_messages.py index bd70edc34..7836f901c 100644 --- a/marconi/tests/transport/wsgi/test_messages.py +++ b/marconi/tests/transport/wsgi/test_messages.py @@ -166,7 +166,7 @@ class TestMessages(util.TestBase): self.assertEquals(self.srmock.status, falcon.HTTP_200) self.assertEquals(self.srmock.headers_dict['Content-Location'], env['PATH_INFO']) - self.assertEquals(countof['messages']['total'], 10) + self.assertEquals(countof['messages']['free'], 10) env = testing.create_environ('/v1/480924/queues/nonexistent/messages', headers=self.headers)