diff --git a/apps/icons/iconsets/fat_cow.py b/apps/icons/iconsets/fat_cow.py index 3b20247d2d..c68b2d077e 100644 --- a/apps/icons/iconsets/fat_cow.py +++ b/apps/icons/iconsets/fat_cow.py @@ -25,11 +25,14 @@ class IconSet(IconSetBase): COG: 'cog.png', COG_ADD: 'cog_add.png', COG_EDIT: 'cog_edit.png', + COG_ERROR: 'cog_error.png', COG_DELETE: 'cog_delete.png', COMMENTS: 'comments.png', COMMENT_ADD: 'comment_add.png', COMMENT_DELETE: 'comment_delete.png', COMPUTER_KEY: 'computer_key.png', + CONTROL_PLAY_BLUE: 'control_play_blue.png', + CONTROL_STOP_BLUE: 'control_stop_blue.png', CROSS: 'cross.png', DATABASE: 'database.png', DATABASE_ADD: 'database_add.png', @@ -52,6 +55,7 @@ class IconSet(IconSetBase): GROUP_DELETE: 'group_delete.png', GROUP_KEY: 'group_key.png', GROUP_LINK: 'group_link.png', + HOURGLASS: 'hourglass.png', HOUSE: 'house.png', INFORMATION: 'information.png', KEY: 'key.png', @@ -71,6 +75,8 @@ class IconSet(IconSetBase): LOCK: 'lock.png', LOCK_EDIT: 'lock_edit.png', LOCK_GO: 'lock_go.png', + LORRY_GO: 'lorry_go.png', + LORRY_DELETE: 'lorry_delete.png', MAGNIFIER: 'magnifier.png', MEDAL_GOLD: 'medal_gold_1.png', MEDAL_GOLD_ADD: 'medal_gold_add.png', diff --git a/apps/icons/literals.py b/apps/icons/literals.py index 7c78c5f02a..f54d313263 100644 --- a/apps/icons/literals.py +++ b/apps/icons/literals.py @@ -19,11 +19,14 @@ CD_BURN = 'cd_burn' COG = 'cog' COG_ADD = 'cog_add' COG_EDIT = 'cog_edit' +COG_ERROR = 'cog_error' COG_DELETE = 'cog_delete' COMMENTS = 'comments' COMMENT_ADD = 'comment_add' COMMENT_DELETE = 'comment_delete' COMPUTER_KEY = 'computer_key' +CONTROL_PLAY_BLUE = 'control_play_blue' +CONTROL_STOP_BLUE = 'control_stop_blue' CROSS = 'cross' DATABASE = 'database' DATABASE_ADD = 'database_add' @@ -48,6 +51,7 @@ GROUP_EDIT = 'group_edit' GROUP_DELETE = 'group_delete' GROUP_KEY = 'group_key' GROUP_LINK = 'group_link' +HOURGLASS = 'hourglass' HOUSE = 'house' INFORMATION = 'information' KEY = 'key' @@ -67,6 +71,8 @@ LINK_DELETE = 'link_delete' LOCK = 'lock' LOCK_EDIT = 'lock_edit' LOCK_GO = 'lock_go' +LORRY_GO = 'lorry_go' +LORRY_DELETE = 'lorry_delete' MAGNIFIER = 'magnifier' MEDAL_GOLD = 'medal_gold' MEDAL_GOLD_ADD = 'medal_gold_add' diff --git a/apps/job_processor/__init__.py b/apps/job_processor/__init__.py index b249827696..ce20abd1dd 100644 --- a/apps/job_processor/__init__.py +++ b/apps/job_processor/__init__.py @@ -9,11 +9,8 @@ from django.db import transaction, DatabaseError from django.dispatch import receiver from django.utils.translation import ugettext_lazy as _ -#from backups.api import AppBackup, ModelBackup -#from app_registry import register_app, UnableToRegister from scheduler.api import LocalScheduler from navigation.api import bind_links, register_model_list_columns -from project_tools.api import register_tool from project_setup.api import register_setup from common.utils import encapsulate @@ -43,7 +40,6 @@ def add_job_queue_jobs(): add_job_queue_jobs() -register_tool(tool_link) register_setup(setup_link) bind_links([JobQueue, 'job_queues'], [job_queues], menu_name='secondary_menu') bind_links([JobQueue], [job_queue_start, job_queue_stop, job_queue_items_pending, job_queue_items_active, job_queue_items_error]) @@ -90,10 +86,3 @@ def kill_all_node_processes(): atexit.register(kill_all_node_processes) - -#try: -# app = register_app('job_processor', _(u'Job processor')) -#except UnableToRegister: -# pass -#else: -# AppBackup(app, [ModelBackup()]) diff --git a/apps/job_processor/conf/__init__.py b/apps/job_processor/conf/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/apps/job_processor/icons.py b/apps/job_processor/icons.py new file mode 100644 index 0000000000..e71d479902 --- /dev/null +++ b/apps/job_processor/icons.py @@ -0,0 +1,17 @@ +from __future__ import absolute_import + +from icons.literals import (LORRY_GO, LORRY_DELETE, HOURGLASS, COG, COG_DELETE, + COG_ERROR, COG_ADD, CONTROL_PLAY_BLUE, CONTROL_STOP_BLUE) +from icons import Icon + +icon_node_workers = Icon(LORRY_GO) +icon_tool_link = Icon(HOURGLASS) +icon_job_queues = Icon(HOURGLASS) +icon_job_queue_items_pending = Icon(COG) +icon_job_queue_items_error = Icon(COG_ERROR) +icon_job_queue_items_active = Icon(COG) +icon_job_queue_start = Icon(CONTROL_PLAY_BLUE) +icon_job_queue_stop = Icon(CONTROL_STOP_BLUE) +icon_job_requeue = Icon(COG_ADD) +icon_job_delete = Icon(COG_DELETE) +icon_worker_terminate = Icon(LORRY_DELETE) diff --git a/apps/job_processor/links.py b/apps/job_processor/links.py index 9a22a2252a..a078a01586 100644 --- a/apps/job_processor/links.py +++ b/apps/job_processor/links.py @@ -9,7 +9,11 @@ from clustering.permissions import PERMISSION_NODES_VIEW from .permissions import (PERMISSION_JOB_QUEUE_VIEW, PERMISSION_JOB_PROCESSING_CONFIGURATION, PERMISSION_JOB_QUEUE_START_STOP, PERMISSION_JOB_REQUEUE, PERMISSION_JOB_DELETE, PERMISSION_WORKER_TERMINATE) - +from .icons import (icon_node_workers, icon_tool_link, icon_job_queues, + icon_job_queue_items_pending, icon_job_queue_items_error, icon_job_queue_items_active, + icon_job_queue_start, icon_job_queue_stop, icon_job_requeue, icon_job_delete, + icon_worker_terminate) + def is_running(context): return context['object'].is_running() @@ -27,23 +31,27 @@ def is_in_pending_state(context): return context['object'].is_in_pending_state -node_workers = Link(text=_(u'workers'), view='node_workers', args='object.pk', sprite='lorry_go', permissions=[PERMISSION_NODES_VIEW]) -tool_link = Link(text=_(u'job queues'), view='job_queues', icon='hourglass.png', permissions=[PERMISSION_JOB_QUEUE_VIEW]) -job_queues = Link(text=_(u'job queue list'), view='job_queues', sprite='hourglass', permissions=[PERMISSION_JOB_QUEUE_VIEW]) -job_queue_items_pending = Link(text=_(u'pending jobs'), view='job_queue_items_pending', args='object.pk', sprite='cog', permissions=[PERMISSION_JOB_QUEUE_VIEW]) -job_queue_items_error = Link(text=_(u'error jobs'), view='job_queue_items_error', args='object.pk', sprite='cog_error', permissions=[PERMISSION_JOB_QUEUE_VIEW]) -job_queue_items_active = Link(text=_(u'active jobs'), view='job_queue_items_active', args='object.pk', sprite='cog', permissions=[PERMISSION_JOB_QUEUE_VIEW]) +#icon_job_queue_config_edit == sprite='hourglass' +#icon_setup_link icon='hourglass.png' -job_queue_start = Link(text=_(u'start'), view='job_queue_start', args='object.pk', sprite='control_play_blue', permissions=[PERMISSION_JOB_QUEUE_START_STOP], condition=is_not_running) -job_queue_stop = Link(text=_(u'stop'), view='job_queue_stop', args='object.pk', sprite='control_stop_blue', permissions=[PERMISSION_JOB_QUEUE_START_STOP], condition=is_running) -job_queue_config_edit = Link(text=_(u'edit job processing configuration'), view='job_queue_config_edit', sprite='hourglass', permissions=[PERMISSION_JOB_PROCESSING_CONFIGURATION]) -setup_link = Link(text=_(u'job processing configuration'), view='job_queue_config_edit', icon='hourglass.png', permissions=[PERMISSION_JOB_PROCESSING_CONFIGURATION]) +node_workers = Link(text=_(u'workers'), view='node_workers', args='object.pk', icon=icon_node_workers, permissions=[PERMISSION_NODES_VIEW]) +tool_link = Link(text=_(u'job queues'), view='job_queues', icon=icon_tool_link, permissions=[PERMISSION_JOB_QUEUE_VIEW]) +job_queues = Link(text=_(u'job queue list'), view='job_queues', icon=icon_job_queues, permissions=[PERMISSION_JOB_QUEUE_VIEW]) +job_queue_items_pending = Link(text=_(u'pending jobs'), view='job_queue_items_pending', args='object.pk', icon=icon_job_queue_items_pending, permissions=[PERMISSION_JOB_QUEUE_VIEW]) +job_queue_items_error = Link(text=_(u'error jobs'), view='job_queue_items_error', args='object.pk', icon=icon_job_queue_items_error, permissions=[PERMISSION_JOB_QUEUE_VIEW]) +job_queue_items_active = Link(text=_(u'active jobs'), view='job_queue_items_active', args='object.pk', icon=icon_job_queue_items_active, permissions=[PERMISSION_JOB_QUEUE_VIEW]) -job_requeue = Link(text=_(u'requeue job'), view='job_requeue', args='object.pk', sprite='cog_add', permissions=[PERMISSION_JOB_REQUEUE], condition=is_in_error_state) -job_delete = Link(text=_(u'delete job'), view='job_delete', args='object.pk', sprite='cog_delete', permissions=[PERMISSION_JOB_DELETE], condition=is_in_pending_state) +job_queue_start = Link(text=_(u'start'), view='job_queue_start', args='object.pk', icon=icon_job_queue_start, permissions=[PERMISSION_JOB_QUEUE_START_STOP], condition=is_not_running) +job_queue_stop = Link(text=_(u'stop'), view='job_queue_stop', args='object.pk', icon=icon_job_queue_stop, permissions=[PERMISSION_JOB_QUEUE_START_STOP], condition=is_running) -worker_terminate = Link(text=_(u'terminate worker'), view='worker_terminate', args='object.pk', sprite='lorry_delete', permissions=[PERMISSION_WORKER_TERMINATE]) +job_queue_config_edit = Link(text=_(u'edit job processing configuration'), view='job_queue_config_edit', permissions=[PERMISSION_JOB_PROCESSING_CONFIGURATION]) +setup_link = Link(text=_(u'job processing configuration'), view='job_queue_config_edit', permissions=[PERMISSION_JOB_PROCESSING_CONFIGURATION]) + +job_requeue = Link(text=_(u'requeue job'), view='job_requeue', args='object.pk', icon=icon_job_requeue, permissions=[PERMISSION_JOB_REQUEUE], condition=is_in_error_state) +job_delete = Link(text=_(u'delete job'), view='job_delete', args='object.pk', icon=icon_job_delete, permissions=[PERMISSION_JOB_DELETE], condition=is_in_pending_state) + +worker_terminate = Link(text=_(u'terminate worker'), view='worker_terminate', args='object.pk', icon=icon_worker_terminate, permissions=[PERMISSION_WORKER_TERMINATE]) ''' diff --git a/apps/job_processor/registry.py b/apps/job_processor/registry.py new file mode 100644 index 0000000000..03bb2cc9ea --- /dev/null +++ b/apps/job_processor/registry.py @@ -0,0 +1,12 @@ +from __future__ import absolute_import + +from django.utils.translation import ugettext_lazy as _ + +from .icons import icon_tool_link +from .links import tool_link + +label = _(u'Job processor') +description = _(u'Handles queuing of jobs to be processed by the cluster nodes.') +icon = icon_tool_link +dependencies = ['navigation', 'icons', 'permissions'] +tool_links = [tool_link] diff --git a/settings.py b/settings.py index 7a19af41ad..41c1552a49 100644 --- a/settings.py +++ b/settings.py @@ -165,7 +165,7 @@ INSTALLED_APPS = ( 'mimetype', 'clustering', 'scheduler', - #'job_processor', + 'job_processor', # Mayan EDMS 'diagnostics', 'maintenance', diff --git a/urls.py b/urls.py index 34faa6cfec..3c39b13838 100644 --- a/urls.py +++ b/urls.py @@ -35,7 +35,7 @@ urlpatterns = patterns('', #(r'^checkouts/', include('checkouts.urls')), #(r'^installation/', include('installation.urls')), (r'^scheduler/', include('scheduler.urls')), - #(r'^job_processing/', include('job_processor.urls')), + (r'^job_processing/', include('job_processor.urls')), #(r'^bootstrap/', include('bootstrap.urls')), (r'^diagnostics/', include('diagnostics.urls')), (r'^maintenance/', include('maintenance.urls')),