def _update_active_work_items(self, queue_status): if queue_status.message != "Retry": # From AbstractQueue._retry_status return active_items = ActiveWorkItems.all().filter("queue_name =", queue_status.queue_name).get() if not active_items: return return db.run_in_transaction(self._expire_item, active_items.key(), queue_status.active_patch_id)
def get(self, queue_name): queued_items = WorkItems.all().filter("queue_name =", queue_name).get() active_items = ActiveWorkItems.all().filter("queue_name =", queue_name).get() statuses = queuestatus.QueueStatus.all().filter("queue_name =", queue_name).order("-date").fetch(15) status_groups = [] last_patch_id = None synthetic_patch_id_counter = 0 for status in statuses: patch_id = status.active_patch_id if not patch_id or last_patch_id != patch_id: status_group = [] status_groups.append(status_group) else: status_group = status_groups[-1] status_group.append(status) last_patch_id = patch_id template_values = { "display_queue_name": display_name_for_queue(queue_name), "work_item_rows": self._rows_for_work_items(queued_items, active_items), "status_groups": status_groups, } self.response.out.write(template.render("templates/queuestatus.html", template_values))
def test_basic(self): items = ActiveWorkItems() queued_items = [1, 2] time = datetime.now() self.assertEqual(items.next_item(queued_items, time), 1) self.assertEqual(items.next_item([1], time), None) self.assertEqual(items.next_item([], time), None) self.assertEqual(items.time_for_item(1), time) self.assertEqual(items.time_for_item(2), None) items.expire_item(1) self.assertEqual(items.time_for_item(1), None)
def test_basic(self): items = ActiveWorkItems.lookup_by_queue("test-queue") queued_items = [1, 2] # db.Model only stores dates to second resolution, so we use an explicit datetime without milliseconds. time = datetime(2011, 4, 18, 18, 50, 44) self.assertEqual(items.next_item(queued_items, time), 1) self.assertEqual(items.next_item([1], time), None) self.assertEqual(items.next_item([], time), None) self.assertEqual(items.time_for_item(1), time) self.assertEqual(items.time_for_item(2), None) items.expire_item(1) # expire_item uses a transaction so it doesn't take effect on the current object. self.assertEqual(items.time_for_item(1), time) # If we look up the saved object, we see it's been updated. items = ActiveWorkItems.lookup_by_queue("test-queue") self.assertEqual(items.time_for_item(1), None)
def active_work_items(self): return ActiveWorkItems.lookup_by_queue(self._name)
def _get_patches_waiting(cls, queue_name): work_items = WorkItems.lookup_by_queue(queue_name) active_work_items = ActiveWorkItems.lookup_by_queue(queue_name) return len(set(work_items.item_ids) - set(active_work_items.item_ids))
def active_work_items(self): key_name = "active-work-items-%s" % (self._name) return ActiveWorkItems.get_or_insert(key_name=key_name, queue_name=self._name)
def _get_next_patch_id(self, queue_name): work_items = WorkItems.all().filter("queue_name =", queue_name).get() if not work_items: return None active_work_items = ActiveWorkItems.get_or_insert(key_name=queue_name, queue_name=queue_name) return db.run_in_transaction(self._assign_patch, active_work_items.key(), work_items.item_ids)