Example #1
0
    def get(self, *args, **kwargs):
        temp_id = self.get_argument('temp_id', default=None, strip=True)
        temp_list = []
        temp_user = []
        if not temp_id:
            return self.write(dict(code=-1, msg='模板ID不能为空'))

        with DBContext('r') as session:
            temp_info = session.query(TempDetails).filter(
                TempDetails.temp_id == temp_id).order_by(
                    TempDetails.group, TempDetails.level).all()
            user_info = session.query(TempToUser).filter(
                TempToUser.temp_id == temp_id).all()

        for msg in temp_info:
            data_dict = model_to_dict(msg)
            data_dict.pop('update_time')
            temp_list.append(data_dict)

        for u in user_info:
            data_dict = model_to_dict(u)
            temp_user.append("{},,,{}".format(data_dict.get("user_id"),
                                              data_dict.get("nickname")))

        data_info = dict(temp_list=temp_list, temp_user=temp_user)

        return self.write(
            dict(code=0, msg='获取模板详情成功', data=data_info, temp_user=temp_user))
Example #2
0
    def get(self, *args, **kwargs):
        page_size = self.get_argument('page', default=1, strip=True)
        limit = self.get_argument('limit', default=500, strip=True)
        limit_start = (int(page_size) - 1) * int(limit)
        task_list = []
        this_list = []
        username = self.get_current_user()
        nickname = self.get_current_nickname()

        with DBContext('r') as session:
            count = session.query(TaskList).filter(TaskList.schedule == 'OK').count()
            task_info = session.query(TaskList).filter(TaskList.schedule == 'OK').order_by(
                -TaskList.list_id).offset(limit_start).limit(int(limit))

        for msg in task_info:
            data_dict = model_to_dict(msg)
            user_list = []
            for i in list(literal_eval(data_dict.get("associated_user")).values()):
                user_list.extend(i)
            if username in user_list or nickname in user_list or self.is_superuser:
                data_dict['create_time'] = str(data_dict['create_time'])
                data_dict['start_time'] = str(data_dict['start_time'])
                this_list.append(data_dict.get("list_id"))
                task_list.append(data_dict)

        return self.write(dict(code=0, msg="获取成功", data=task_list, count=count, history=True))
Example #3
0
    def put(self, *args, **kwargs):
        ### 处理全部需要手动干预的任务
        data = json.loads(self.request.body.decode("utf-8"))
        list_id = data.get('list_id', None)
        hand_task = data.get('hand_task', None)

        if not list_id:
            return self.write(dict(code=-1, msg='订单ID 不能为空'))
        if not hand_task:
            return self.write(dict(code=-2, msg='任务名称不正确'))

        with DBContext('w', None, True) as session:
            session.query(TaskSched).filter(TaskSched.list_id == list_id, TaskSched.task_name == hand_task).update(
                {TaskSched.task_status: '1'})
            data_info = session.query(TaskSched).filter(TaskSched.list_id == list_id,
                                                        TaskSched.task_name == hand_task).all()

            redis_conn = cache_conn()
            redis_pipe = redis_conn.pipeline()
            for msg in data_info:
                data_dict = model_to_dict(msg)
                hash_key = "task_{}_{}_{}".format(list_id, data_dict["task_group"], data_dict["exec_ip"])
                redis_pipe.hset(hash_key, data_dict["task_level"], '1')
                redis_pipe.expire(hash_key, 2592000)
            redis_pipe.execute()

        return self.write(dict(code=0, msg='审核干预成功'))
Example #4
0
    def get(self, *args, **kwargs):
        temp_id = self.get_argument('temp_id', default=None, strip=True)
        args_list = []

        if not temp_id:
            return self.write(dict(code=-1, msg='模板ID不能为空'))

        with DBContext('r') as session:
            temp_args = session.query(
                TempDetails.args).filter(TempDetails.temp_id == temp_id).all()
            args_info = session.query(ArgsList).all()

        for msg in temp_args:
            if msg[0]:
                for m in msg[0].split():
                    args_list.append(m)

        args_list = list(set(args_list))
        if 'FLOW_ID' in args_list:
            args_list.remove('FLOW_ID')

        args_dict = {}
        for msg in args_info:
            data_dict = model_to_dict(msg)
            if data_dict['args_self']:
                args_dict[data_dict['args_self']] = data_dict['args_name']

        return self.write(
            dict(code=0, msg="获取成功", data=args_list, args_dict=args_dict))
Example #5
0
    def get(self, *args, **kwargs):
        search_value = self.get_argument('search_value',
                                         default=None,
                                         strip=True)
        page_size = self.get_argument('page', default=1, strip=True)
        limit = self.get_argument('limit', default=201, strip=True)
        limit_start = (int(page_size) - 1) * int(limit)
        args_list = []

        with DBContext('r') as session:
            if search_value:
                count = session.query(ArgsList).filter(
                    or_(ArgsList.args_id.like('{}%'.format(search_value)),
                        ArgsList.args_name.like('{}%'.format(search_value)),
                        ArgsList.args_self.like('{}%'.format(search_value)),
                        ArgsList.creator.like(
                            '{}%'.format(search_value)))).count()

                args_info = session.query(ArgsList).filter(
                    or_(ArgsList.args_id.like('{}%'.format(search_value)),
                        ArgsList.args_name.like('{}%'.format(search_value)),
                        ArgsList.args_self.like('{}%'.format(search_value)),
                        ArgsList.creator.like('{}%'.format(
                            search_value)))).offset(limit_start).limit(
                                int(limit))

                if limit > 200:
                    args_info = session.query(ArgsList).filter(
                        or_(
                            ArgsList.args_id.like('{}%'.format(search_value)),
                            ArgsList.args_name.like(
                                '{}%'.format(search_value)),
                            ArgsList.args_self.like(
                                '{}%'.format(search_value)),
                            ArgsList.creator.like(
                                '{}%'.format(search_value)))).all()

            elif limit > 200:  ### 获取全部
                count = session.query(ArgsList).count()
                args_info = session.query(ArgsList).order_by(
                    ArgsList.args_id).all()

            else:  ## 默认分页查询
                count = session.query(ArgsList).count()
                args_info = session.query(ArgsList).order_by(
                    ArgsList.args_id).offset(limit_start).limit(int(limit))

        for msg in args_info:
            data_dict = model_to_dict(msg)
            data_dict['update_time'] = str(data_dict['update_time'])
            args_list.append(data_dict)

        return self.write(dict(code=0, msg='获取成功', data=args_list,
                               count=count))
Example #6
0
    def get(self, *args, **kwargs):
        user_list = []

        with DBContext('r') as session:
            args_info = session.query(ExecuteUser).order_by(
                ExecuteUser.id).all()

        for msg in args_info:
            data_dict = model_to_dict(msg)
            data_dict['update_time'] = str(data_dict['update_time'])
            user_list.append(data_dict)

        return self.write(dict(code=0, msg='获取成功', data=user_list))
Example #7
0
def tail_data():
    log_list = []
    with DBContext('r') as session:
        for key in LISTENERS:
            ele_list = LISTENERS[key]['ele']
            if ele_list:
                log_info = session.query(TaskLog).filter(TaskLog.log_key == key).order_by(
                    TaskLog.log_time).all()
                for msg in log_info:
                    data_dict = model_to_dict(msg)
                    log_list.append("{}: {}".format(str(data_dict.get('log_time')), data_dict.get('log_info')))

                for el in ele_list:
                    el.write_message('----'.join(log_list))

            else:
                LISTENERS.pop(key)
Example #8
0
def get_log_data():
    log_list1 = []
    with DBContext('r') as session:
        for key in LISTENERS_v1:
            ele_list = LISTENERS_v1[key]['ele']
            if ele_list:
                log_info = session.query(TaskLog).filter(
                    TaskLog.log_key == key).order_by(TaskLog.exec_time).all()
                for msg in log_info:
                    data_dict = model_to_dict(msg)
                    log_list1.append(data_dict.get('log_info'))

                if log_list1:
                    del log_list1[0]
                for el in ele_list:
                    el.write_message('----'.join(log_list1))

            else:
                LISTENERS_v1.pop(key)
Example #9
0
    def get(self, *args, **kwargs):
        key = self.get_argument('key', default=None, strip=True)
        value = self.get_argument('value', default=None, strip=True)
        args_list = []

        with DBContext('r') as session:
            if key and value:
                args_info = session.query(ArgsList).filter_by(**{
                    key: value
                }).order_by(ArgsList.args_id).all()
            else:
                args_info = session.query(ArgsList).order_by(
                    ArgsList.args_id).all()

        for msg in args_info:
            data_dict = model_to_dict(msg)
            data_dict['update_time'] = str(data_dict['update_time'])
            args_list.append(data_dict)

        return self.write(dict(code=0, msg='获取成功', data=args_list))
Example #10
0
def get_task_info(list_id, task_group, exec_ip, this_host_list):
    scheduler_list = []
    hosts_status = {}
    with DBContext('r') as session:
        for h in this_host_list:
            scheduler_info = session.query(TaskSched).filter(TaskSched.list_id == list_id,
                                                             TaskSched.task_group == task_group,
                                                             TaskSched.exec_ip == h).order_by(
                TaskSched.task_level).all()

            status_list = []
            for msg in scheduler_info:
                data_dict = model_to_dict(msg)
                status_list.append(data_dict.get("task_status"))
                if exec_ip == data_dict.get("exec_ip"):
                    scheduler_list.append(data_dict)

            status = '4'
            if '0' in status_list:
                status = '0'
            if '1' in status_list:
                status = '1'
            if '2' in status_list:
                status = '2'
            if '5' in status_list and '1' not in status_list and '2' not in status_list:
                status = '5'
            if '6' in status_list:
                status = '6'
            if '7' in status_list:
                status = '7'
            if '4' in status_list:
                status = '4'
            if '3' in status_list and len(list(set(status_list))) == 1:
                status = '3'

            hosts_status[str(h)] = status

    return scheduler_list, hosts_status
Example #11
0
    def get(self, *args, **kwargs):
        page_size = self.get_argument('page', default=1, strip=True)
        limit = self.get_argument('limit', default=500, strip=True)
        limit_start = (int(page_size) - 1) * int(limit)
        task_list = []
        this_list = []

        with DBContext('r') as session:
            count = session.query(TaskList).filter(
                TaskList.schedule == 'OK').count()
            task_info = session.query(TaskList).filter(
                TaskList.schedule == 'OK').order_by(-TaskList.list_id).offset(
                    limit_start).limit(int(limit))

        for msg in task_info:
            data_dict = model_to_dict(msg)
            data_dict['create_time'] = str(data_dict['create_time'])
            data_dict['start_time'] = str(data_dict['start_time'])
            this_list.append(data_dict.get("list_id"))
            task_list.append(data_dict)

        return self.write(
            dict(code=0, msg="获取成功", data=task_list, count=count,
                 history=True))
Example #12
0
    def exec_list_thread(self, lid, *all_gid):
        ### 如果任务没有审批,则进入休眠,初始休眠时间为0秒
        int_sleep, end_sleep = 1, 1
        while True:
            ### 挂起的任务设置休眠时间
            ins_log.read_log(
                'info',
                'The task-{0} is not ready, retry after {1} s of sleep'.format(
                    lid, int_sleep))
            time.sleep(int_sleep)
            int_sleep += 2
            end_sleep += int_sleep
            if int_sleep > 15:
                int_sleep = 15

            with DBContext('r') as session:
                job_code = session.query(TaskList).filter(
                    TaskList.list_id == lid,
                    TaskList.schedule == 'new').first()
            if not job_code:
                break

            if end_sleep > 150:
                raise SystemExit('message timeout')

        ### 标记为任务开始,判断任务是否审批(schedule等于ready)
        with DBContext('w') as session:
            session.query(TaskList.list_id).filter(
                TaskList.list_id == lid, TaskList.schedule == 'ready').update(
                    {TaskList.schedule: 'start'})
            session.commit()

        exec_user_dict = dict()
        with DBContext('r') as session:
            exec_user_info = session.query(ExecuteUser).all()
            task_info = session.query(TaskList).filter(
                TaskList.list_id == lid).first()
            sched_task_info = session.query(TaskSched).filter(
                TaskSched.list_id == lid).all()
            ### 参数信息 主机信息
            all_args_info = literal_eval(task_info.args)
            all_host_info = literal_eval(task_info.hosts)
            self.redis_conn.set('task_id_{}_start_time'.format(lid),
                                time.mktime(task_info.start_time.timetuple()))
            self.redis_conn.expire('task_id_{}_start_time'.format(lid),
                                   2592000)

            ### 管理用户信息
            for msg in exec_user_info:
                data_dict = model_to_dict(msg)
                exec_user_dict[data_dict.get("exec_user") +
                               "port"] = data_dict.get("ssh_port", "22")
                exec_user_dict[data_dict.get("exec_user") +
                               "password"] = data_dict.get("password", "")
                key_file = "/home/.ssh_key/{}_key".format(
                    data_dict.get("exec_user"))
                if not os.path.exists('/home/.ssh_key/'):
                    os.makedirs('/home/.ssh_key/')
                with open(key_file, 'w') as k_file:
                    k_file.write(data_dict.get("user_key"))
                os.system("chmod 600 {}".format(key_file))

            ### 取出必要信息写入缓存
            level_list_info = dict()
            for i in all_gid:
                level_list_info[i[0]] = []
            with self.redis_conn.pipeline() as redis_pipe:
                for msg in sched_task_info:
                    data_dict = model_to_dict(msg)
                    log_key = "{}_{}_{}_{}".format(lid,
                                                   data_dict["task_group"],
                                                   data_dict["task_level"],
                                                   data_dict["exec_ip"])
                    task_info_key = "task_info_{}".format(log_key)
                    level_status_key = "level_status_{}".format(log_key)

                    data_dict["log_key"] = log_key
                    redis_pipe.hmset(task_info_key, data_dict)
                    redis_pipe.set(level_status_key, data_dict["task_status"])
                    redis_pipe.expire(task_info_key, 2592000)
                    redis_pipe.expire(level_status_key, 2592000)

                    for i in all_gid:
                        if i[0] == data_dict["task_group"]:
                            level_list_info[i[0]].append(
                                data_dict["task_level"])
                redis_pipe.execute()
        threads = []
        #####取所有主机###
        for i in all_gid:
            i = i[0]
            if i:
                all_exec_ip = all_host_info.get(i)
                level_list = list(set(level_list_info[i]))
                print('level_list', level_list)
                threads.append(
                    multiprocessing.Process(target=self.run,
                                            args=(lid, i, all_exec_ip,
                                                  all_args_info,
                                                  exec_user_dict, level_list)))
        ins_log.read_log(
            'info', "current has %d threads group execution " % len(threads))

        ###开始多进程
        for start_t in threads:
            try:
                start_t.start()
            except UnboundLocalError:
                ins_log.read_log('error', "UnboundLocalError")
        ###阻塞
        for join_t in threads:
            join_t.join()