Пример #1
0
 def test_from_message(self):
     us = "æØåveéðƒeæ"
     body = {"task": self.mytask.name, "id": uuid(), "args": [2], "kwargs": {us: "bar"}}
     m = Message(
         None, body=anyjson.dumps(body), backend="foo", content_type="application/json", content_encoding="utf-8"
     )
     job = Request(m.decode(), message=m, app=self.app)
     self.assertIsInstance(job, Request)
     self.assertEqual(job.name, body["task"])
     self.assertEqual(job.id, body["id"])
     self.assertEqual(job.args, body["args"])
     us = from_utf8(us)
     if sys.version_info < (2, 6):
         self.assertEqual(next(keys(job.kwargs)), us)
         self.assertIsInstance(next(keys(job.kwargs)), str)
Пример #2
0
    def test_start(self):
        s, sh = self.get_service()
        schedule = s.scheduler.schedule
        assert isinstance(schedule, dict)
        assert isinstance(s.scheduler, beat.Scheduler)
        scheduled = list(schedule.keys())
        for task_name in keys(sh[str('entries')]):
            assert task_name in scheduled

        s.sync()
        assert sh.closed
        assert sh.synced
        assert s._is_stopped.isSet()
        s.sync()
        s.stop(wait=False)
        assert s._is_shutdown.isSet()
        s.stop(wait=True)
        assert s._is_shutdown.isSet()

        p = s.scheduler._store
        s.scheduler._store = None
        try:
            s.scheduler.sync()
        finally:
            s.scheduler._store = p
Пример #3
0
 def test_from_message(self):
     us = 'æØåveéðƒeæ'
     body = {'task': self.mytask.name, 'id': uuid(),
             'args': [2], 'kwargs': {us: 'bar'}}
     m = Message(None, body=anyjson.dumps(body), backend='foo',
                 content_type='application/json',
                 content_encoding='utf-8')
     job = TaskRequest.from_message(m, m.decode(), app=self.app)
     self.assertIsInstance(job, Request)
     self.assertEqual(job.name, body['task'])
     self.assertEqual(job.id, body['id'])
     self.assertEqual(job.args, body['args'])
     us = from_utf8(us)
     if sys.version_info < (2, 6):
         self.assertEqual(next(keys(job.kwargs)), us)
         self.assertIsInstance(next(keys(job.kwargs)), str)
Пример #4
0
    def test_start(self):
        s, sh = self.get_service()
        schedule = s.scheduler.schedule
        self.assertIsInstance(schedule, dict)
        self.assertIsInstance(s.scheduler, beat.Scheduler)
        scheduled = list(schedule.keys())
        for task_name in keys(sh['entries']):
            self.assertIn(task_name, scheduled)

        s.sync()
        self.assertTrue(sh.closed)
        self.assertTrue(sh.synced)
        self.assertTrue(s._is_stopped.isSet())
        s.sync()
        s.stop(wait=False)
        self.assertTrue(s._is_shutdown.isSet())
        s.stop(wait=True)
        self.assertTrue(s._is_shutdown.isSet())

        p = s.scheduler._store
        s.scheduler._store = None
        try:
            s.scheduler.sync()
        finally:
            s.scheduler._store = p
Пример #5
0
 def test_pending_configuration__iter(self):
     with self.Celery(broker='foo://bar') as app:
         app.conf.worker_agent = 'foo:Bar'
         assert not app.configured
         assert list(keys(app.conf))
         assert app.configured
         assert 'worker_agent' in app.conf
         assert dict(app.conf)
Пример #6
0
 def test_pending_configuration__iter(self):
     with self.Celery(broker='foo://bar') as app:
         app.conf.worker_agent = 'foo:Bar'
         self.assertFalse(app.configured)
         self.assertTrue(list(keys(app.conf)))
         self.assertFalse(app.configured)
         self.assertIn('worker_agent', app.conf)
         self.assertFalse(app.configured)
         self.assertTrue(dict(app.conf))
         self.assertTrue(app.configured)
Пример #7
0
def detect_settings(conf,
                    preconf={},
                    ignore_keys=set(),
                    prefix=None,
                    all_keys=SETTING_KEYS,
                    old_keys=_OLD_SETTING_KEYS):
    source = conf
    if conf is None:
        source, conf = preconf, {}
    have = set(keys(source)) - ignore_keys
    is_in_new = have.intersection(all_keys)
    is_in_old = have.intersection(old_keys)

    info = None
    if is_in_new:
        # have new setting names
        info, left = _settings_info, is_in_old
        if is_in_old and len(is_in_old) > len(is_in_new):
            # Majority of the settings are old.
            info, left = _old_settings_info, is_in_new
    if is_in_old:
        # have old setting names, or a majority of the names are old.
        if not info:
            info, left = _old_settings_info, is_in_new
        if is_in_new and len(is_in_new) > len(is_in_old):
            # Majority of the settings are new
            info, left = _settings_info, is_in_old
    else:
        # no settings, just use new format.
        info, left = _settings_info, is_in_old

    if prefix:
        # always use new format if prefix is used.
        info, left = _settings_info, set()

    # only raise error for keys that the user didn't provide two keys
    # for (e.g., both ``result_expires`` and ``CELERY_TASK_RESULT_EXPIRES``).
    really_left = {key for key in left if info.convert[key] not in have}
    if really_left:
        # user is mixing old/new, or new/old settings, give renaming
        # suggestions.
        raise ImproperlyConfigured(
            info.mix_error.format(renames='\n'.join(
                FMT_REPLACE_SETTING.format(replace=key,
                                           with_=info.convert[key])
                for key in sorted(really_left))))

    preconf = {info.convert.get(k, k): v for k, v in items(preconf)}
    defaults = dict(deepcopy(info.defaults), **preconf)
    return Settings(
        preconf,
        [conf, defaults],
        (_old_key_to_new, _new_key_to_old),
        prefix=prefix,
    )
Пример #8
0
def task_view(request):  
    if request.method == "GET":          
        try:       
            workList = WorkerState.objects.all()
            regTaskList = []
            for task in  list(keys(cTasks)):
                if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.assets.sched'):
                    regTaskList.append(task)              
        except Exception, ex:
            print ex
            taskLog = []
        return render(request,'task/task_view.html',
                      {"user":request.user,"regTaskList":regTaskList,"workList":workList},
                     )    
Пример #9
0
def task_view(request):  
    if request.method == "GET":          
        try:       
            workList = WorkerState.objects.all()
            regTaskList = []
            for task in  list(keys(cTasks)):
                if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.sched'):
                    regTaskList.append(task)              
        except Exception, ex:
            logger.warn(msg="获取Celery Task失败: {ex}".format(ex=str(ex)))
            taskLog = []
        return render(request,'task/task_view.html',
                      {"user":request.user,"regTaskList":regTaskList,"workList":workList},
                     )    
Пример #10
0
def task_view(request):  
    if request.method == "GET":          
        try:       
            workList = WorkerState.objects.all()
            regTaskList = []
            for task in  list(keys(cTasks)):
                if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.sched'):
                    regTaskList.append(task)              
        except Exception, ex:
            print ex
            taskLog = []
        return render(request,'task/task_view.html',
                      {"user":request.user,"regTaskList":regTaskList,"workList":workList},
                     )    
Пример #11
0
def detect_settings(
    conf, preconf={}, ignore_keys=set(), prefix=None, all_keys=SETTING_KEYS, old_keys=_OLD_SETTING_KEYS
):
    source = conf
    if conf is None:
        source, conf = preconf, {}
    have = set(keys(source)) - ignore_keys
    is_in_new = have.intersection(all_keys)
    is_in_old = have.intersection(old_keys)

    info = None
    if is_in_new:
        # have new setting names
        info, left = _settings_info, is_in_old
        if is_in_old and len(is_in_old) > len(is_in_new):
            # Majority of the settings are old.
            info, left = _old_settings_info, is_in_new
    if is_in_old:
        # have old setting names, or a majority of the names are old.
        if not info:
            info, left = _old_settings_info, is_in_new
        if is_in_new and len(is_in_new) > len(is_in_old):
            # Majority of the settings are new
            info, left = _settings_info, is_in_old
    else:
        # no settings, just use new format.
        info, left = _settings_info, is_in_old

    if prefix:
        # always use new format if prefix is used.
        info, left = _settings_info, set()

    # only raise error for keys that the user didn't provide two keys
    # for (e.g., both ``result_expires`` and ``CELERY_TASK_RESULT_EXPIRES``).
    really_left = {key for key in left if info.convert[key] not in have}
    if really_left:
        # user is mixing old/new, or new/old settings, give renaming
        # suggestions.
        raise ImproperlyConfigured(
            info.mix_error.format(
                renames="\n".join(
                    FMT_REPLACE_SETTING.format(replace=key, with_=info.convert[key]) for key in sorted(really_left)
                )
            )
        )

    preconf = {info.convert.get(k, k): v for k, v in items(preconf)}
    defaults = dict(deepcopy(info.defaults), **preconf)
    return Settings(preconf, [conf, defaults], (_old_key_to_new, _new_key_to_old), prefix=prefix)
Пример #12
0
 def test_from_message(self):
     us = 'æØåveéðƒeæ'
     body = {
         'task': self.mytask.name,
         'id': uuid(),
         'args': [2],
         'kwargs': {
             us: 'bar'
         }
     }
     m = Message(None,
                 body=anyjson.dumps(body),
                 backend='foo',
                 content_type='application/json',
                 content_encoding='utf-8')
     job = Request(m.decode(), message=m, app=self.app)
     self.assertIsInstance(job, Request)
     self.assertEqual(job.name, body['task'])
     self.assertEqual(job.id, body['id'])
     self.assertEqual(job.args, body['args'])
     us = from_utf8(us)
     if sys.version_info < (2, 6):
         self.assertEqual(next(keys(job.kwargs)), us)
         self.assertIsInstance(next(keys(job.kwargs)), str)
Пример #13
0
def task_model(request):
    if request.method == "GET":
        # 获取注册的任务
        regTaskList = []
        for task in list(keys(cTasks)):
            if task.startswith('OpsManage.tasks.ansible') or task.startswith(
                    'OpsManage.tasks.sched'):
                regTaskList.append(task)
        try:
            crontabList = CrontabSchedule.objects.all().order_by("-id")
            intervalList = IntervalSchedule.objects.all().order_by("-id")
            taskList = PeriodicTask.objects.all().order_by("-id")
            playbookList = Ansible_Playbook.objects.all()

            newtaskList = []
            for item in taskList:
                if item.kwargs.find('playbook_id') == -1:
                    continue
                kwargs = json.loads(item.kwargs)
                playbook_id = kwargs["playbook_id"]
                playbook = Ansible_Playbook.objects.get(id=int(playbook_id))
                task = {
                    'id': item.id,
                    'name': item.name,
                    'task': item.task,
                    'last_run_at': item.last_run_at,
                    'total_run_count': item.total_run_count,
                    'enabled': item.enabled,
                    'crontab_id': item.crontab_id,
                    'interval_id': item.interval_id,
                    'expires': item.expires,
                    'playbook_name': playbook.playbook_name,
                }
                newtaskList.append(task)
        except:
            crontabList = []
            intervalList = []
            newtaskList = []
        return render(
            request, 'crontask/task_model.html', {
                "user": request.user,
                "crontabList": crontabList,
                "intervalList": intervalList,
                "taskList": newtaskList,
                "regTaskList": regTaskList,
                "playbookList": playbookList
            })
Пример #14
0
    def run(self, force=False, queues=None, exclude_queues=None, **kwargs):
        queues = set(text.str_to_list(queues or []))
        exclude = set(text.str_to_list(exclude_queues or []))
        names = (queues or set(keys(self.app.amqp.queues))) - exclude
        qnum = len(names)

        messages = None
        if names:
            if not force:
                self.out(self.warn_prelude.format(
                    warning=self.colored.red('WARNING'),
                    queues=text.pluralize(qnum, 'queue'),
                    names=', '.join(sorted(names)),
                ))
                if self.ask(self.warn_prompt, ('yes', 'no'), 'no') != 'yes':
                    return
            with self.app.connection_for_write() as conn:
                messages = sum(self._purge(conn, queue) for queue in names)
        fmt = self.fmt_purged if messages else self.fmt_empty
        self.out(fmt.format(
            mnum=messages, qnum=qnum,
            messages=text.pluralize(messages, 'message'),
            queues=text.pluralize(qnum, 'queue')))
Пример #15
0
    def run(self, force=False, queues=None, exclude_queues=None, **kwargs):
        queues = set(str_to_list(queues or []))
        exclude = set(str_to_list(exclude_queues or []))
        names = (queues or set(keys(self.app.amqp.queues))) - exclude
        qnum = len(names)

        messages = None
        if names:
            if not force:
                self.out(self.warn_prelude.format(
                    warning=self.colored.red('WARNING'),
                    queues=text.pluralize(qnum, 'queue'),
                    names=', '.join(sorted(names)),
                ))
                if self.ask(self.warn_prompt, ('yes', 'no'), 'no') != 'yes':
                    return
            with self.app.connection_for_write() as conn:
                messages = sum(self._purge(conn, queue) for queue in names)
        fmt = self.fmt_purged if messages else self.fmt_empty
        self.out(fmt.format(
            mnum=messages, qnum=qnum,
            messages=text.pluralize(messages, 'message'),
            queues=text.pluralize(qnum, 'queue')))
Пример #16
0
def task_model(request):
    if request.method == "GET":
        # 获取注册的任务
        regTaskList = []
        for task in list(keys(cTasks)):
            if task.startswith('OMBA.tasks.ansible') or task.startswith(
                    'OMBA.tasks.sched'):
                regTaskList.append(task)
        try:
            crontabList = CrontabSchedule.objects.all().order_by("-id")
            intervalList = IntervalSchedule.objects.all().order_by("-id")
            taskList = PeriodicTask.objects.all().order_by("-id")
        except:
            crontabList = []
            intervalList = []
            taskList = []
        return render(
            request, 'task/task_model.html', {
                "user": request.user,
                "crontabList": crontabList,
                "intervalList": intervalList,
                "taskList": taskList,
                "regTaskList": regTaskList
            })
    elif request.method == "POST":
        op = request.POST.get('op')
        if op in [
                'addCrontab', 'delCrontab', 'addInterval', 'delInterval',
                'addTask', 'editTask', 'delTask'
        ] and request.user.has_perm('djcelery.change_periodictask'):
            if op == 'addCrontab':
                try:
                    CrontabSchedule.objects.create(
                        minute=request.POST.get('minute'),
                        hour=request.POST.get('hour'),
                        day_of_week=request.POST.get('day_of_week'),
                        day_of_month=request.POST.get('day_of_month'),
                        month_of_year=request.POST.get('month_of_year'),
                    )
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "添加成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "添加失败"
                    })
            elif op == 'delCrontab':
                try:
                    CrontabSchedule.objects.get(
                        id=request.POST.get('id')).delete()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "删除成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "删除失败"
                    })
            elif op == 'addInterval':
                try:
                    IntervalSchedule.objects.create(
                        every=request.POST.get('every'),
                        period=request.POST.get('period'))
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "添加成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "添加失败"
                    })
            elif op == 'delInterval':
                try:
                    IntervalSchedule.objects.get(
                        id=request.POST.get('id')).delete()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "删除成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "删除失败"
                    })
            elif op == 'addTask':
                try:
                    PeriodicTask.objects.create(
                        name=request.POST.get('name'),
                        interval_id=request.POST.get('interval', None),
                        task=request.POST.get('task', None),
                        crontab_id=request.POST.get('crontab', None),
                        args=request.POST.get('args', '[]'),
                        kwargs=request.POST.get('kwargs', '{}'),
                        queue=request.POST.get('queue', None),
                        enabled=int(request.POST.get('enabled', 1)),
                        expires=request.POST.get('expires', None))
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "添加成功"
                    })
                except Exception, e:
                    return JsonResponse({
                        "code": 500,
                        "data": str(e),
                        "msg": "添加失败"
                    })
            elif op == 'delTask':
                try:
                    PeriodicTask.objects.get(
                        id=request.POST.get('id')).delete()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "删除成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "删除失败"
                    })
            elif op == 'editTask':
                try:
                    task = PeriodicTask.objects.get(id=request.POST.get('id'))
                    task.name = request.POST.get('name')
                    task.interval_id = request.POST.get('interval', None)
                    task.crontab_id = request.POST.get('crontab', None)
                    task.args = request.POST.get('args')
                    task.kwargs = request.POST.get('kwargs')
                    task.queue = request.POST.get('queue', None)
                    task.expires = request.POST.get('expires', None)
                    task.enabled = int(request.POST.get('enabled'))
                    task.save()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "修改成功"
                    })
                except Exception, e:
                    return JsonResponse({
                        "code": 500,
                        "data": str(e),
                        "msg": "修改失败"
                    })
Пример #17
0
 def test_deselect(self):
     q = Queues()
     q.select(['foo', 'bar'])
     q.deselect('bar')
     assert sorted(keys(q._consume_from)) == ['foo']
Пример #18
0
def configTask(request):
    if request.method == "GET":
        #获取注册的任务
        regTaskList = []
        for task in list(keys(tasks)):
            if task.startswith('VManagePlatform'): regTaskList.append(task)
        try:
            crontabList = CrontabSchedule.objects.all().order_by("-id")
            intervalList = IntervalSchedule.objects.all().order_by("-id")
            taskList = PeriodicTask.objects.all().order_by("-id")
        except:
            crontabList = []
            intervalList = []
            taskList = []
        return render_to_response('vmTasks/config_task.html', {
            "user":
            request.user,
            "localtion": [{
                "name": "首页",
                "url": '/'
            }, {
                "name": "任务调度",
                "url": '#'
            }, {
                "name": "配置中心",
                "url": "/configTask"
            }],
            "crontabList":
            crontabList,
            "intervalList":
            intervalList,
            "taskList":
            taskList,
            "regTaskList":
            regTaskList
        },
                                  context_instance=RequestContext(request))
    elif request.method == "POST":
        op = request.POST.get('op')
        if op in [
                'addCrontab', 'delCrontab', 'addInterval', 'delInterval',
                'addTask', 'editTask', 'delTask'
        ] and request.user.has_perm('djcelery.change_periodictask'):
            if op == 'addCrontab':
                try:
                    CrontabSchedule.objects.create(
                        minute=request.POST.get('minute'),
                        hour=request.POST.get('hour'),
                        day_of_week=request.POST.get('day_of_week'),
                        day_of_month=request.POST.get('day_of_month'),
                        month_of_year=request.POST.get('month_of_year'),
                    )
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "添加成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "添加失败"
                    })
            elif op == 'delCrontab':
                try:
                    CrontabSchedule.objects.get(
                        id=request.POST.get('id')).delete()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "删除成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "删除失败"
                    })
            elif op == 'addInterval':
                try:
                    IntervalSchedule.objects.create(
                        every=request.POST.get('every'),
                        period=request.POST.get('period'))
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "添加成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "添加失败"
                    })
            elif op == 'delInterval':
                try:
                    IntervalSchedule.objects.get(
                        id=request.POST.get('id')).delete()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "删除成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "删除失败"
                    })
            elif op == 'addTask':
                try:
                    PeriodicTask.objects.create(
                        name=request.POST.get('name'),
                        interval_id=request.POST.get('interval', None),
                        task=request.POST.get('task', None),
                        crontab_id=request.POST.get('crontab', None),
                        args=request.POST.get('args', '[]'),
                        kwargs=request.POST.get('kwargs', '{}'),
                        queue=request.POST.get('queue', None),
                        enabled=int(request.POST.get('enabled', 1)),
                        expires=request.POST.get('expires', None))
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "添加成功"
                    })
                except Exception, e:
                    return JsonResponse({
                        "code": 500,
                        "data": e,
                        "msg": "添加失败"
                    })
            elif op == 'delTask':
                try:
                    PeriodicTask.objects.get(
                        id=request.POST.get('id')).delete()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "删除成功"
                    })
                except:
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "删除失败"
                    })
            elif op == 'editTask':
                try:
                    task = PeriodicTask.objects.get(id=request.POST.get('id'))
                    task.name = request.POST.get('name')
                    task.interval_id = request.POST.get('interval', None)
                    task.crontab_id = request.POST.get('crontab', None)
                    task.args = request.POST.get('args')
                    task.kwargs = request.POST.get('kwargs')
                    task.queue = request.POST.get('queue', None)
                    task.expires = request.POST.get('expires', None)
                    task.enabled = int(request.POST.get('enabled'))
                    task.save()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "修改成功"
                    })
                except Exception, e:
                    return JsonResponse({
                        "code": 500,
                        "data": e,
                        "msg": "修改失败"
                    })
Пример #19
0
                stack.append((ns + key + '_', opt))
            else:
                for ret in keyfilter(ns, key, opt):
                    yield ret


DEFAULTS = {
    key: opt.default for key, opt in flatten(NAMESPACES)
}
__compat = list(flatten(NAMESPACES, keyfilter=_to_compat))
_OLD_DEFAULTS = {old_key: opt.default for old_key, _, opt in __compat}
_TO_OLD_KEY = {new_key: old_key for old_key, new_key, _ in __compat}
_TO_NEW_KEY = {old_key: new_key for old_key, new_key, _ in __compat}
__compat = None

SETTING_KEYS = set(keys(DEFAULTS))
_OLD_SETTING_KEYS = set(keys(_TO_NEW_KEY))


def find_deprecated_settings(source):  # pragma: no cover
    from celery.utils import deprecated
    for name, opt in flatten(NAMESPACES):
        if (opt.deprecate_by or opt.remove_by) and getattr(source, name, None):
            deprecated.warn(description='The {0!r} setting'.format(name),
                            deprecation=opt.deprecate_by,
                            removal=opt.remove_by,
                            alternative='Use the {0.alt} instead'.format(opt))
    return source


@memoize(maxsize=None)
Пример #20
0
 def _iterate_keys(self):
     # userdict.keys in py3k calls __getitem__
     with self.mutex:
         return keys(self.data)
Пример #21
0
def task_model(request):
    if request.method == "GET":
        #获取注册的任务
        regTaskList = []
        for task in list(keys(cTasks)):
            if task.startswith('OpsManage.tasks.ansible') or task.startswith('OpsManage.tasks.sched'):
                regTaskList.append(task)
        try:
            crontabList = CrontabSchedule.objects.all().order_by("-id")
            intervalList = IntervalSchedule.objects.all().order_by("-id")
            taskList = PeriodicTask.objects.all().order_by("-id")
        except:
            crontabList = []
            intervalList = []
            taskList = []
        return render(request,'task/task_model.html',{"user":request.user,"crontabList":crontabList,
                                              "intervalList":intervalList,"taskList":taskList,
                                              "regTaskList":regTaskList})  
    elif request.method == "POST":
        op = request.POST.get('op') 
        if op in ['addInterval','delInterval','addTask','editTask','delTask'] and request.user.has_perm('djcelery.change_periodictask'): 
            if op == 'addInterval':
                try:
                    IntervalSchedule.objects.create(every=request.POST.get('every'),period=request.POST.get('period'))
                    return  JsonResponse({"code":200,"data":None,"msg":"添加成功"})
                except:
                    return  JsonResponse({"code":500,"data":None,"msg":"添加失败"})    
            elif op == 'delInterval':
                try:
                    IntervalSchedule.objects.get(id=request.POST.get('id')).delete()
                    return  JsonResponse({"code":200,"data":None,"msg":"删除成功"})
                except:
                    return  JsonResponse({"code":500,"data":None,"msg":"删除失败"})
            elif op == 'addTask':
                try:
                    PeriodicTask.objects.create(name=request.POST.get('name'),
                                                interval_id=request.POST.get('interval',None),
                                                task=request.POST.get('task',None),
                                                crontab_id=request.POST.get('crontab',None),
                                                args = request.POST.get('args','[]'),
                                                kwargs = request.POST.get('kwargs','{}'),
                                                queue = request.POST.get('queue',None),
                                                enabled = int(request.POST.get('enabled',1)),
                                                expires = request.POST.get('expires',None)
                                                      )
                    return  JsonResponse({"code":200,"data":None,"msg":"添加成功"})
                except Exception,e:
                    return  JsonResponse({"code":500,"data":str(e),"msg":"添加失败"})    
            elif op == 'delTask':
                try:
                    PeriodicTask.objects.get(id=request.POST.get('id')).delete()
                    return  JsonResponse({"code":200,"data":None,"msg":"删除成功"})
                except:
                    return  JsonResponse({"code":500,"data":None,"msg":"删除失败"})
            elif op == 'editTask':
                try:
                    task = PeriodicTask.objects.get(id=request.POST.get('id'))
                    task.name = request.POST.get('name')
                    task.interval_id = request.POST.get('interval',None)
                    task.crontab_id = request.POST.get('crontab',None)
                    task.args = request.POST.get('args')
                    task.kwargs = request.POST.get('kwargs')
                    task.queue = request.POST.get('queue',None)
                    task.expires = request.POST.get('expires',None)
                    task.enabled = int(request.POST.get('enabled'))
                    task.save()
                    return  JsonResponse({"code":200,"data":None,"msg":"修改成功"})
                except Exception,e:
                    return  JsonResponse({"code":500,"data":str(e),"msg":"修改失败"})                             
Пример #22
0
 def test_select_add(self):
     q = Queues()
     q.select(["foo", "bar"])
     q.select_add("baz")
     assert sorted(keys(q._consume_from)) == ["bar", "baz", "foo"]
Пример #23
0
 def test_deselect(self):
     q = Queues()
     q.select(["foo", "bar"])
     q.deselect("bar")
     self.assertItemsEqual(keys(q._consume_from), ["foo"])
Пример #24
0
 def test_select_add(self):
     q = Queues()
     q.select(["foo", "bar"])
     q.select_add("baz")
     self.assertItemsEqual(keys(q._consume_from), ["foo", "bar", "baz"])
Пример #25
0
 def keys(self):
     # userdict.keys in py3k calls __getitem__
     return keys(self.data)
Пример #26
0
def registered_tasks(request):
    """View returning all defined tasks as a JSON object."""
    return JsonResponse({'regular': list(keys(tasks)), 'periodic': ''})
Пример #27
0
 def _LRUkey(self):
     # type: () -> Any
     # return value of od.keys does not support __next__,
     # but this version will also not create a copy of the list.
     return next(iter(keys(self)))
Пример #28
0
 def test_select_remove(self):
     q = Queues()
     q.select_subset(["foo", "bar"])
     q.select_remove("bar")
     self.assertItemsEqual(keys(q._consume_from), ["foo"])
Пример #29
0
def task_view(request):
    if request.method == "GET":
        try:
            workList = WorkerState.objects.all()
            regTaskList = []
            for task in list(keys(cTasks)):
                if task.startswith('ConfManage.tasks.cron') or task.startswith(
                        'ConfManage.tasks.sched'):
                    regTaskList.append(task)
        except Exception as ex:
            logger.warn(msg="获取Celery Task失败: {ex}".format(ex=str(ex)))
            taskLog = []
        return render(
            request,
            'task/task_view.html',
            {
                "user": request.user,
                "regTaskList": regTaskList,
                "workList": workList
            },
        )
    elif request.method == "POST":
        op = request.POST.get('op')
        if op in ['view', 'delete', 'kill'
                  ] and request.user.has_perm('djcelery.change_taskstate'):
            try:
                task = {}
                for ds in PeriodicTask.objects.all():
                    task[ds.task] = ds.name
                taskLog = TaskState.objects.get(id=request.POST.get('id'))
            except:
                return JsonResponse({
                    "code": 500,
                    "data": None,
                    "msg": "任务不存在"
                })
            if op == 'view':
                try:
                    data = dict()
                    work = WorkerState.objects.get(id=taskLog.worker_id)
                    data['id'] = taskLog.id
                    data['task_id'] = taskLog.task_id
                    data['worker'] = work.hostname
                    if task.has_key(taskLog.name):
                        data['name'] = task[taskLog.name]
                    else:
                        data['name'] = taskLog.name
                    data['tstamp'] = taskLog.tstamp
                    data['args'] = taskLog.args.replace('[u', '[')
                    data['kwargs'] = taskLog.kwargs.replace('u\'', '\'')
                    data['result'] = taskLog.result
                    data['state'] = taskLog.state
                    data['runtime'] = taskLog.runtime
                    return JsonResponse({
                        "code": 200,
                        "data": data,
                        "msg": "操作成功"
                    })
                except Exception as ex:
                    logger.warn(msg="查看Celery Task运行日志失败: {ex}".format(
                        ex=str(ex)))
                    return JsonResponse({
                        "code": 500,
                        "data": None,
                        "msg": "日志查看失败。"
                    })
            elif op == 'delete':
                try:
                    taskLog.delete()
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "删除成功"
                    })
                except Exception as ex:
                    return JsonResponse({
                        "code": 500,
                        "data": ex,
                        "msg": "日志删除失败"
                    })
            elif op == 'kill':
                try:
                    revoke(taskLog.task_id, terminate=True)
                    return JsonResponse({
                        "code": 200,
                        "data": None,
                        "msg": "任务终止成功"
                    })
                except Exception as ex:
                    logger.warn(msg="终止任务失败: {ex}".format(ex=str(ex)))
                    return JsonResponse({
                        "code": 500,
                        "data": ex,
                        "msg": "任务终止成功"
                    })
        else:
            return JsonResponse({
                "code": 500,
                "data": "终止任务失败: {ex}".format(ex=str(ex)),
                "msg": "不支持的操作或者您没有权限操作操作此项。"
            })
    else:
        return JsonResponse({"code": 500, "data": None, "msg": "不支持的HTTP操作"})
Пример #30
0
 def _iterate_keys(self):
     # userdict.keys in py3k calls __getitem__
     return keys(self.data)
Пример #31
0
 def test_select_add(self):
     q = Queues()
     q.select(['foo', 'bar'])
     q.select_add('baz')
     assert sorted(keys(q._consume_from)) == ['bar', 'baz', 'foo']
Пример #32
0
 def test_deselect(self):
     q = Queues()
     q.select(["foo", "bar"])
     q.deselect("bar")
     assert sorted(keys(q._consume_from)) == ["foo"]
Пример #33
0
 def test_deselect(self):
     q = Queues()
     q.select(['foo', 'bar'])
     q.deselect('bar')
     assert sorted(keys(q._consume_from)) == ['foo']
Пример #34
0
 def _LRUkey(self):
     # type: () -> Any
     # return value of od.keys does not support __next__,
     # but this version will also not create a copy of the list.
     return next(iter(keys(self)))
Пример #35
0
 def test_select_add(self):
     q = Queues()
     q.select(['foo', 'bar'])
     q.select_add('baz')
     self.assertItemsEqual(keys(q._consume_from), ['foo', 'bar', 'baz'])
Пример #36
0
 def test_select_add(self):
     q = Queues()
     q.select(['foo', 'bar'])
     q.select_add('baz')
     assert sorted(keys(q._consume_from)) == ['bar', 'baz', 'foo']
Пример #37
0
 def test_deselect(self):
     q = Queues()
     q.select(['foo', 'bar'])
     q.deselect('bar')
     self.assertItemsEqual(keys(q._consume_from), ['foo'])
Пример #38
0
                stack.append((ns + key + '_', opt))
            else:
                for ret in keyfilter(ns, key, opt):
                    yield ret


DEFAULTS = {
    key: opt.default for key, opt in flatten(NAMESPACES)
}
__compat = list(flatten(NAMESPACES, keyfilter=_to_compat))
_OLD_DEFAULTS = {old_key: opt.default for old_key, _, opt in __compat}
_TO_OLD_KEY = {new_key: old_key for old_key, new_key, _ in __compat}
_TO_NEW_KEY = {old_key: new_key for old_key, new_key, _ in __compat}
__compat = None

SETTING_KEYS = set(keys(DEFAULTS))
_OLD_SETTING_KEYS = set(keys(_TO_NEW_KEY))


def find_deprecated_settings(source):  # pragma: no cover
    from celery.utils import deprecated
    for name, opt in flatten(NAMESPACES):
        if (opt.deprecate_by or opt.remove_by) and getattr(source, name, None):
            deprecated.warn(description='The {0!r} setting'.format(name),
                            deprecation=opt.deprecate_by,
                            removal=opt.remove_by,
                            alternative='Use the {0.alt} instead'.format(opt))
    return source


@memoize(maxsize=None)
Пример #39
0
 def test_select_remove(self):
     q = Queues()
     q.select_subset(['foo', 'bar'])
     q.select_remove('bar')
     self.assertItemsEqual(keys(q._consume_from), ['foo'])