def health(estimation_fn=estimate_rough_queue_completion): """Return information about the health of the queue in a format that can be turned into JSON. """ # Import this here so that we only need slumber if health is called. try: from slumber import data_link except ImportError: # pragma: no cover return {} output = {'queue': {}, 'errors': {}} output['queue']['all-jobs'] = Job.objects.all().count() output['queue']['executed'] = Job.objects.exclude(executed=None).count() output['queue']['executed-details'] = \ get_grouped_aggregate(jobs_type='executed') output['queue']['oldest-executed'] = data_link( get_first(Job.objects.exclude(executed=None).order_by('executed'))) output['queue']['most-recent-executed'] = data_link( get_first(Job.objects.exclude(executed=None).order_by('-executed'))) output['queue']['remaining'] = Job.objects.filter(executed=None, cancelled=None).count() # output['queue']['remaining-details'] = \ # get_grouped_aggregate( # jobs_type='done', # complement=True) output['queue']['not-executed'] = \ Job.objects.filter(executed=None, cancelled__isnull=True).count() output['queue']['not-executed-details'] = \ get_not_exeuted_details() output['queue']['cancelled'] = \ Job.objects.filter(cancelled__isnull=False).count() output['queue']['oldest-cancelled'] = data_link( get_first(Job.objects.exclude(cancelled=None).order_by('cancelled'))) output['queue']['most-recent-cancelled'] = data_link( get_first(Job.objects.exclude(cancelled=None).order_by('-cancelled'))) output['queue']['cancelled-details'] = \ get_grouped_aggregate(jobs_type='cancelled', complement=True) output['queue']['estimated-completion-current-job'] = \ estimate_current_job_completion() output['queue']['estimated-completion'] = estimation_fn() output['errors']['number'] = Error.objects.all().count() return output
def health(estimation_fn=estimate_rough_queue_completion): """Return information about the health of the queue in a format that can be turned into JSON. """ # Import this here so that we only need slumber if health is called. try: from slumber import data_link except ImportError: # pragma: no cover return {} output = {'queue': {}, 'errors': {}} output['queue']['all-jobs'] = Job.objects.all().count() output['queue']['executed'] = Job.objects.exclude(executed=None).count() output['queue']['executed-details'] = \ get_grouped_aggregate(jobs_type='executed') output['queue']['oldest-executed'] = data_link(get_first( Job.objects.exclude(executed=None).order_by('executed'))) output['queue']['most-recent-executed'] = data_link(get_first( Job.objects.exclude(executed=None).order_by('-executed'))) output['queue']['remaining'] = Job.objects.filter( executed=None, cancelled=None).count() # output['queue']['remaining-details'] = \ # get_grouped_aggregate( # jobs_type='done', # complement=True) output['queue']['not-executed'] = \ Job.objects.filter(executed=None, cancelled__isnull=True).count() output['queue']['not-executed-details'] = \ get_not_exeuted_details() output['queue']['cancelled'] = \ Job.objects.filter(cancelled__isnull=False).count() output['queue']['oldest-cancelled'] = data_link(get_first( Job.objects.exclude(cancelled=None).order_by('cancelled'))) output['queue']['most-recent-cancelled'] = data_link(get_first( Job.objects.exclude(cancelled=None).order_by('-cancelled'))) output['queue']['cancelled-details'] = \ get_grouped_aggregate(jobs_type='cancelled', complement=True) output['queue']['estimated-completion-current-job'] = \ estimate_current_job_completion() output['queue']['estimated-completion'] = estimation_fn() output['errors']['number'] = Error.objects.all().count() return output
def hal_instance_list(operation, control, builder, query_set, page_size=10): """Return a page of JSON-HAL based results across the query set. """ from slumber import data_link starter = control.get('lpk', None) if starter: query_set = query_set.filter(pk__lt=starter) lpk = None for instance in query_set.order_by('-pk').iterator(): if page_size == 0: builder.add_link('next', operation(lpk=lpk)) return else: page_size -= 1 lpk = instance.pk item = Builder(data_link(instance)) item.set_property('display', unicode(instance)) builder.embed('page', item)
def test_data_link(self): shop = Shop.objects.create(name="Test Cafe") self.assertEqual(data_link(shop), '/slumber/pizzas/shop/%s/' % shop.pk)
def test_data_link(self): pizza = Pizza.objects.create(name="Test pizza") self.assertEqual(data_link(pizza), '/slumber/slumber_examples/Pizza/data/%s/' % pizza.pk)
def check_pizzas(self, pizzas): base = from_slumber_scheme('slumber://pizza/slumber_examples/Pizza/') urls = [urljoin(base, data_link(p)) for p in pizzas] self.assertEquals(set(urls), self.URLS)
def test_empty_data_link(self): self.assertIsNone(data_link(None))