Beispiel #1
0
    def __init__(self):
        self.fileHandler: FileHandler = FileHandler()
        self.sManager: SettingsManager = SettingsManager()
        self.server: ServerManager = ServerManager()
        self.scheduler: DeviceOpScheduler = DeviceOpScheduler()
        self.logger: Logger = None

        self.botClosing = False
Beispiel #2
0
    def __init__(self):
        """
        Constructor
        """
        self.__dict__ = self.__shared_state  # borg pattern

        if not self.instance:
            self.instance = True

            # extend filenames with path to the configurationfolder
            self.log_file = Globals.config_dir + FileManager.log_file
            self.fav_file = Globals.config_dir + FileManager.fav_file
            self.rec_file = Globals.config_dir + FileManager.rec_file
            self.conf_file = Globals.config_dir + FileManager.conf_file
            self.buddies_file = Globals.config_dir + FileManager.buddies_file
            self.filter_file = Globals.config_dir + FileManager.filter_file
            self.rcon_file = Globals.config_dir + FileManager.rcon_file
            self.window_size_file = Globals.config_dir+FileManager.\
                                                                window_size_file

            #initialise ServerManager
            self.srvman = ServerManager()
Beispiel #3
0
def create_app():
    app = Flask(__name__)
    #app = QuitableFlask(__name__)
    #init ThriftServer
    app.config['extractor'] = ThriftExtractor(
        host=THRIFT_EXTRACTOR_CONFIG['host'],
        port=THRIFT_EXTRACTOR_CONFIG['port'])
    app.config['downloader'] = ThriftDownloader(
        host=THRIFT_DOWNLOADER_CONFIG['host'],
        port=THRIFT_DOWNLOADER_CONFIG['port'])
    app.config['scheduler'] = ThriftScheduler(
        host=THRIFT_SCHEDULER_CONFIG['host'],
        port=THRIFT_SCHEDULER_CONFIG['port'])
    app.config['entity_extractor'] = ThriftEntityExtractor(
        host=THRIFT_ENTITY_EXTRACTOR_CONFIG['host'],
        port=THRIFT_ENTITY_EXTRACTOR_CONFIG['port'])
    app.config['crawler_merge'] = ThriftCrawlerMerge(
        **THRIFT_CRAWLERMERGE_CONFIG)
    app.config['data_saver'] = ThriftDataSaver(**THRIFT_DATA_SAVER_CONFIG)
    # 统计器
    app.config['statistics'] = Statistics(logger=i_manage_log,
                                          mysql_conf=MYSQL)
    realtime_crawl = {}
    if hasattr(conf, "realtime_crawl"):
        realtime_crawl = conf.realtime_crawl
    app.config['schedule_debug'] = ScheduleDebug(logger=i_manage_log,
                                                 mysql_conf=MYSQL,
                                                 crawl_conf=realtime_crawl)
    # 服务监控器
    app.config['server_manager'] = ServerManager(logger=i_manage_log,
                                                 redis_conf=REDIS)
    # 消息队列服务
    app.config['put_beanstald_server'] = PutBeanstaldServer(
        beanstalk_conf=BEANSTALKD_CONFIG, log=i_manage_log)
    app.config['put_beanstald_server'].start()
    # 代理设置
    app.config['proxy'] = Proxies(log=i_manage_log, config=REDIS)
    #init MysqlEngine
    engine = create_engine(MYSQL)
    Dsession = sessionmaker(bind=engine)
    app.config['Dsession'] = Dsession
    # mongodb
    mongo_conn = pymongo.MongoClient(host=MONGODB['host'],
                                     port=MONGODB['port'])
    if MONGODB['username'] != '':
        app.config['mongodb'] = mongo_conn[MONGODB['database']]
        app.config['mongodb'].authenticate(MONGODB['username'],
                                           MONGODB['password'])
    else:
        app.config['mongodb'] = mongo_conn[MONGODB['database']]

    # redis
    app.config['redis'] = REDIS
    app.config['redis_conn'] = StrictRedis(host=REDIS['host'],
                                           port=REDIS['port'],
                                           password=REDIS['password'])
    # regiest log
    app.config['logger'] = i_manage_log
    #register blueprint
    from parser_api import parser_api
    app.register_blueprint(parser_api, url_prefix='/api/parser')
    from stat_api import stat_api
    app.register_blueprint(stat_api, url_prefix='/api/statistics')
    from site_api import site_api
    app.register_blueprint(site_api, url_prefix='/api/site')
    from seed_api import seed_api
    app.register_blueprint(seed_api, url_prefix='/api/seed')
    from topic_api import topic_api
    app.register_blueprint(topic_api, url_prefix='/api/topic')
    from schedule_api import schedule_api
    app.register_blueprint(schedule_api, url_prefix='/api/schedule')
    from download_api import download_api
    app.register_blueprint(download_api, url_prefix='/api/download')
    from datasave_api import datasave_api
    app.register_blueprint(datasave_api, url_prefix='/api/datasave')
    from entity_api import entity_api
    app.register_blueprint(entity_api, url_prefix='/api/entity')

    @app.route('/test_parser_config')
    def test_parser_config():
        return app.send_static_file('test_parser_config.html')

    return app
Beispiel #4
0
    def getServerList(self, host, port, empty, full):
        """
        Query a master server to retreive a list of registered game servers.
        
        @param host - host of the master server
        @param port - port of the master server
        @param empty - boolean parameter - false = empty servers will not be returned
                       by the master server - true = get also empty servers
        @param full - boolean parameter - false = full sercers will no be returned 
                      by the master server - true = get also full servers
                      
        @return list of server objects
        """
        Log.log.info('[Q3ServerQuery] - start master server query')

        #server manager
        srvman = ServerManager()
        self.serverlist = []

        #open socket to the master server
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect((host, port))
        s.settimeout(2)
        # build command string based on the provided parameters empty and full
        # format 'OOBgetservers protocol [empty] [full] [demo]'
        cmd = self.packet_prefix + 'getservers  68 '
        if empty and full:
            cmd += 'empty full'
        else:
            if empty:
                cmd += 'empty'
            if full:
                cmd += 'full'
        cmd += ' demo'
        # send !
        s.send(cmd)

        # the master server can send multiple reponse packets based on the count
        # of servers - collect all of these response packtes in a list
        self.response = []
        while True:
            try:
                # a full responsepacket has 1394 bytes so use 1395 as
                # receive buffer
                response = s.recv(1395)

            except:
                break

            if not response:
                break
            else:
                self.response.append(response)

        Log.log.debug('[Q3ServerQuery] received ' \
                    + str(len(self.response)) + ' response packets ' \
                    + 'from master server')

        # parse the response
        # packet format: all packets starts with the OOB bytes and a
        # 'getserversResponse' string. after this start the server list starts
        # which are each 7 bytes. Start with the char / (first byte), the next
        # four bytes are the ip and the last two bytes is the port number
        # transmission of servers ends with '/EOF' at the end of the last packet
        for packet in self.response:
            index = 22  # OOB bytes + getserversResponse = 22 bytes
            # iterate over the 7 byte fields in the packet
            while True:
                # /EOF or malformed packet
                if index + 7 >= len(packet):
                    break
                # ip
                ip = inet_ntop(socket.AF_INET, packet[index + 1:index + 5])
                #port
                port = 256 * ord(packet[index + 5]) + ord(packet[index + 6])
                index += 7
                # create server object and add it to the serverlist that will
                # be returned
                server = srvman.getServer(ip, int(port))
                self.serverlist.append(server)

        s.close()

        Log.log.info('[Q3ServerQuery] - finished master server query. ' \
                     + 'returning list with ' + str(len(self.serverlist)) \
                     + ' servers')
        return self.serverlist