Ejemplo n.º 1
0
 def run(self):
     logger.info('start run result worker.')
     AutoDeployHistory.update_deploy_history(result_pid=self.pid)
     while True:
         result = self.resultQueue.get()
         if result is None:
             logger.info(
                 'Found None in result queue, result worker exiting')
             # add log to db, get current progress info(current first step-1), and read log file content
             self.resultQueue.task_done()
             break
         logger.info('get new deploy result: %s, start to deal with it.' %
                     result)
         # do work with result
         try:
             self.deal_result(result)
         except:
             error_msg = 'Error occured when result worker deal result.'
             error_msg += traceback.format_exc()
             logger.error(error_msg)
             break
         else:
             logger.info('finish deal with deploy result: %s' % result)
             self.resultQueue.task_done()
     AutoDeployHistory.update_deploy_history(result_pid=0,
                                             is_result_finish=True)
     send_progress_result.delay()
Ejemplo n.º 2
0
def ami_and_stop_env(request):
    auto_deploy_history = AutoDeployHistory.objects.filter(
        Q(is_deploy_finish=False) | Q(is_result_finish=False))
    if auto_deploy_history:
        return HttpResponse(
            '%s autodeploy process is running: %s' %
            (len(auto_deploy_history),
             [history.progress_name for history in auto_deploy_history]),
            status=400)
    username = request.GET.get('username')
    if not username:
        return HttpResponse('bad request!', status=400)
    upgrade_version = request.session.get('upgrade_version', None)
    managers = request.session.get('managers', None)
    if not upgrade_version or not managers:
        return HttpResponse(
            'no upgrade version or managers info found, ensure prework(like stop env) has done before',
            status=400)
    progress_name = 'ami_and_finish_work'
    AutoDeployHistory.add_new_deploy_history(upgrade_version, managers,
                                             progress_name)
    result_worker = __get_result_worker(progress_name)
    progress = processmgr.ProgressStarter(progress_name, result_worker,
                                          **{'username': username})
    Thread(target=progress.start).start()
    return HttpResponse(json.dumps({'status': 200}))
Ejemplo n.º 3
0
 def deal_result(self, result):
     """
     work to do with deploy work result, overwrite this method to define operations
     Args:
         result (object): the result get from result queue.
     """
     logger.info('deal result by StartEnvResultWorker')
     AutoDeployHistory.update_log_content(result)
Ejemplo n.º 4
0
def start_env(request):
    upgrade_version = request.GET.get('upgrade_version')
    managers = request.GET.get('managers')
    if not upgrade_version or not managers:
        return HttpResponse('bad request!', status=400)
    AutoDeployHistory.add_new_deploy_history(upgrade_version, managers,
                                             'start_env')
    result_worker = __get_result_worker('start_env')
    progress = processmgr.ProgressStarter('start_env', result_worker)
    Thread(target=progress.start).start()
    return HttpResponse('ok')
Ejemplo n.º 5
0
 def run(self):
     AutoDeployHistory.update_deploy_history(task_pid=self.pid)
     success_flag = True
     while True:
         next_task = self.task_queue.get()
         if next_task is None:
             logger.info(
                 'all tasks in task queue have finished. wait all tasks done and exit.'
             )
             AutoDeployHistory.update_deploy_history()
             self.result_queue.put(None)
             self.task_queue.task_done()
             break
         logger.info('start task: %s' % next_task)
         try:
             answer = next_task()
         except:
             error_msg = 'occur error when task exec, deploy worker exiting.\n'
             error_msg += traceback.format_exc()
             logger.error(error_msg)
             self.result_queue.put(error_msg)
             self.result_queue.put(None)
             success_flag = False
             break
         if answer['ret']:
             self.result_queue.put(answer['msg'])
         else:
             error_msg = 'auto deploy failed. error message:\n'
             error_msg += answer['msg']
             logger.error(error_msg)
             self.result_queue.put(error_msg)
             self.result_queue.put(None)
             success_flag = False
             break
         self.task_queue.task_done()
         logger.info('task done: %s' % next_task)
         AutoDeployHistory.update_current_task_num()
     AutoDeployHistory.update_deploy_history(task_pid=0,
                                             is_deploy_finish=True,
                                             is_success=success_flag,
                                             end_time=datetime.now())