Ejemplo n.º 1
0
def main():
    if '--test' in sys.argv or '-t' in sys.argv: test()
    CommonLog.print_welcome().print_configs()

    App.run_check()
    User.run()
    Query.run()
    if not Const.IS_TEST:
        while True:
            sleep(10000)

    CommonLog.print_test_complete()
Ejemplo n.º 2
0
def main():
    load_argvs()
    CommonLog.print_welcome()
    App.run()
    CommonLog.print_configs()
    App.did_start()

    App.run_check()
    User.run()
    Query.run()
    if not Const.IS_TEST:
        while True:
            sleep(10000)
    else:
        if Config().is_cluster_enabled(): stay_second(5) # 等待接受完通知
    CommonLog.print_test_complete()
Ejemplo n.º 3
0
def users():
    """
    用户任务列表
    :return:
    """
    jobs = User().users
    result = list(map(convert_job_to_info, jobs))
    return jsonify(result)
Ejemplo n.º 4
0
    def user_job_destroy(self, data={}, callback=False):
        from py12306.user.user import User
        if Config().is_cluster_enabled() and not callback:
            return self.cluster.publish_event(self.KEY_JOB_DESTROY,
                                              data)  # 通知其它节点退出

        user = User.get_user(data.get('key'))
        if user:
            user.destroy()
Ejemplo n.º 5
0
 def check_passengers(self):
     if not self.passengers:
         QueryLog.add_quick_log(QueryLog.MESSAGE_CHECK_PASSENGERS.format(self.job_name)).flush()
         passengers = User.get_passenger_for_members(self.members, self.account_key)
         if passengers:
             self.set_passengers(passengers)
         else:  # 退出当前查询任务
             self.destroy()
     return True
Ejemplo n.º 6
0
    def handle_seats(self, allow_seats, ticket_info):
        for seat in allow_seats:  # 检查座位是否有票
            self.set_seat(seat)
            ticket_of_seat = ticket_info[self.current_seat]
            if not self.is_has_ticket_by_seat(ticket_of_seat):  # 座位是否有效
                continue
            QueryLog.print_ticket_seat_available(left_date=self.get_info_of_left_date(),
                                                 train_number=self.get_info_of_train_number(), seat_type=seat,
                                                 rest_num=ticket_of_seat)
            if not self.is_member_number_valid(ticket_of_seat):  # 乘车人数是否有效
                if self.allow_less_member:
                    self.member_num_take = int(ticket_of_seat)
                    QueryLog.print_ticket_num_less_than_specified(ticket_of_seat, self)
                else:
                    QueryLog.add_quick_log(
                        QueryLog.MESSAGE_GIVE_UP_CHANCE_CAUSE_TICKET_NUM_LESS_THAN_SPECIFIED).flush()
                    continue
            if Const.IS_TEST: return
            # 检查完成 开始提交订单
            QueryLog.print_ticket_available(left_date=self.get_info_of_left_date(),
                                            train_number=self.get_info_of_train_number(),
                                            rest_num=ticket_of_seat)
            if User.is_empty():
                QueryLog.add_quick_log(QueryLog.MESSAGE_USER_IS_EMPTY_WHEN_DO_ORDER.format(self.retry_time))
                return stay_second(self.retry_time)

            order_result = False
            user = self.get_user()
            if not user:
                QueryLog.add_quick_log(QueryLog.MESSAGE_ORDER_USER_IS_EMPTY.format(self.retry_time))
                return stay_second(self.retry_time)

            lock_id = Cluster.KEY_LOCK_DO_ORDER + '_' + user.key
            if Config().is_cluster_enabled():
                if self.cluster.get_lock(lock_id, Cluster.lock_do_order_time,
                                         {'node': self.cluster.node_name}):  # 获得下单锁
                    order_result = self.do_order(user)
                    if not order_result:  # 下单失败,解锁
                        self.cluster.release_lock(lock_id)
                else:
                    QueryLog.add_quick_log(
                        QueryLog.MESSAGE_SKIP_ORDER.format(self.cluster.get_lock_info(lock_id).get('node'),
                                                           user.user_name))
                    stay_second(self.retry_time)  # 防止过多重复
            else:
                order_result = self.do_order(user)

            # 任务已成功 通知集群停止任务
            if order_result:
                Event().job_destroy({'name': self.job_name})
Ejemplo n.º 7
0
 def update_configs_from_remote(self, envs, first=False):
     if envs == self.envs: return
     from py12306.query.query import Query
     from py12306.user.user import User
     for key, value in envs:
         if key in self.disallow_update_configs: continue
         if value != -1:
             old = getattr(self, key)
             setattr(self, key, value)
             if not first:
                 if key == 'USER_ACCOUNTS' and old != value:
                     User().update_user_accounts(auto=True, old=old)
                 elif key == 'QUERY_JOBS' and old != value:
                     Query().update_query_jobs(auto=True)  # 任务修改
                 elif key == 'QUERY_INTERVAL' and old != value:
                     Query().update_query_interval(auto=True)
Ejemplo n.º 8
0
def dashboard():
    """
    状态统计
    任务数量,用户数量,查询次数
    节点信息(TODO)
    :return:
    """
    from py12306.log.query_log import QueryLog
    query_job_count = len(Query().jobs)
    user_job_count = len(User().users)
    query_count = QueryLog().data.get('query_count')
    return jsonify({
        'query_job_count': query_job_count,
        'user_job_count': user_job_count,
        'query_count': query_count
    })
Ejemplo n.º 9
0
 def update_user(self):
     from py12306.user.user import User
     self.user = User()
     # if not Const.IS_TEST:  测试模块下也可以从文件中加载用户
     self.load_user()
Ejemplo n.º 10
0
 def update_user(self):
     from py12306.user.user import User
     self.user = User()
     self.heartbeat_interval = self.user.heartbeat
     # if not Const.IS_TEST:  测试模块下也可以从文件中加载用户
     self.load_user()
Ejemplo n.º 11
0
 def check_passengers(self):
     if not self.passengers:
         QueryLog.add_quick_log(QueryLog.MESSAGE_CHECK_PASSENGERS).flush()
         self.set_passengers(
             User.get_passenger_for_members(self.members, self.account_key))
     return True