Added OCR view displaying all active OCR tasks from all cluster nodes

This commit is contained in:
Roberto Rosario
2011-04-25 02:17:13 -04:00
parent 386d51e324
commit a7be566f50
3 changed files with 55 additions and 1 deletions

View File

@@ -35,6 +35,9 @@ document_queue_enable = {'text': _(u'activate queue'), 'view': 'document_queue_e
all_document_ocr_cleanup = {'text': _(u'clean up pages content'), 'view': 'all_document_ocr_cleanup', 'famfam': 'text_strikethrough', 'permissions': {'namespace': 'ocr', 'permissions': [PERMISSION_OCR_CLEAN_ALL_PAGES]}}
queue_document_list = {'text': _(u'queue document list'), 'view': 'queue_document_list', 'famfam': 'hourglass', 'permissions': {'namespace': 'ocr', 'permissions': [PERMISSION_OCR_DOCUMENT]}}
node_active_list = {'text': _(u'active tasks'), 'view': 'node_active_list', 'famfam': 'server_chart', 'permissions': {'namespace': 'ocr', 'permissions': [PERMISSION_OCR_DOCUMENT]}}
register_links(Document, [submit_document])
register_links(DocumentQueue, [document_queue_disable, document_queue_enable])
@@ -43,7 +46,7 @@ register_multi_item_links(['queue_document_list'], [re_queue_multiple_document,
#Menus
register_menu([
{'text': _('OCR'), 'view': 'queue_document_list', 'links':[
#ocr_queue
queue_document_list, node_active_list
], 'famfam': 'hourglass', 'position': 4}])

View File

@@ -12,4 +12,5 @@ urlpatterns = patterns('ocr.views',
url(r'^ocr/queue/(?P<document_queue_id>\d+)/disable/$', 'document_queue_disable', (), 'document_queue_disable'),
url(r'^ocr/document/all/clean_up/$', 'all_document_ocr_cleanup', (), 'all_document_ocr_cleanup'),
url(r'^ocr/node/active/list/$', 'node_active_list', (), 'node_active_list'),
)

View File

@@ -1,4 +1,5 @@
import datetime
import socket
from django.http import HttpResponseRedirect
from django.shortcuts import render_to_response, get_object_or_404
@@ -8,6 +9,7 @@ from django.views.generic.list_detail import object_list
from django.core.urlresolvers import reverse
from django.utils.translation import ugettext as _
from celery.task.control import inspect
from permissions.api import check_permissions
from documents.models import Document
@@ -263,3 +265,51 @@ def all_document_ocr_cleanup(request):
messages.error(request, _(u'Document pages content clean up error: %s') % e)
return HttpResponseRedirect(next)
def display_link(obj):
output = []
if hasattr(obj, 'get_absolute_url'):
output.append(u'<a href="%(url)s">%(obj)s</a>'% {
'url': obj.get_absolute_url(),
'obj': obj
})
if output:
return u''.join(output)
else:
return obj
def node_active_list(request):
check_permissions(request.user, 'ocr', [PERMISSION_OCR_DOCUMENT])
i = inspect()
active_tasks = []
try:
active_nodes = i.active()
for node, tasks in active_nodes.items():
for task in tasks:
task_info = {
'node': node,
'task_name': task['name'],
'task_id': task['id'],
'related_object': None,
}
if task['name'] == u'ocr.tasks.task_process_queue_document':
task_info['related_object'] = QueueDocument.objects.get(pk=eval(task['args'])[0]).document
active_tasks.append(task_info)
except socket.error:
active_tasks = []
return render_to_response('generic_list.html', {
'object_list': active_tasks,
'title': _(u'active tasks'),
'hide_links': True,
'hide_object': True,
'extra_columns': [
{'name': _(u'node'), 'attribute': 'node'},
{'name': _(u'task id'), 'attribute': 'task_id'},
{'name': _(u'task name'), 'attribute': 'task_name'},
{'name': _(u'related object'), 'attribute': lambda x: display_link(x['related_object']) if x['related_object'] else u''}
],
}, context_instance=RequestContext(request))