Beispiel #1
0
class PublishServer():
    '''
    发布服务器, 每次采集成功后, 会调用此服务中的push转发到各个站点
    '''
    def __init__(self):
	'''
	初始化 把所有的网站都列出来, 并且进行数据推送
	'''
	#site cache
	self.sites = {}
	# site map cache by category, kaifu
	self.site_by_category = {}

	#初始化站点信息
	self.init_sites()
	self.mapdb = Site_map()

    def init_sites(self):
	'''
	初始化将所有的站点数据保存在sites中
	'''
	site_db = Site_Model();
	query = site_db.select();
	r = query.list();
	for site in r:
	    if site and "id" in site:
		self.sites[site["id"]] = Site(site)

    def update_sites(self):
	'''
	这里更新需要做一次安全的检测。 当push不在调用的时候执行此函数
	'''
	self.init_sites();

    def get_site(self, site_id):
	'''
	get Site instance by site_id
	'''
	if site_id in self.sites:
	    return self.sites[site_id]

    def init_site_fieldmap(self, seed_type):
	'''
	初始化站点字段映射表
	'''
	self.site_by_category[seed_type] = {}
	query = self.mapdb.select(where={ "seed_type" : seed_type }, what="siteid", group="siteid")
	if len(query) > 0:
	    r = query.list();
	    for site in r:
		site_id = site["siteid"]
		#映射数据表
		fields = self.mapdb.select( where = { "seed_type" : seed_type, "siteid" : site_id} ).list()
		self.site_by_category[seed_type][site_id] = fields

    def update_site_fieldmap(self, seed_type):
	'''
	这里更新时候需要做安全检测
	'''

    def push(self, guid, data):
	'''
	发布接口
	将发布的数据解析类型。 根据类型找到site_id
	然后发布出去
	'''
	seed_type = data["type"]
	if seed_type not in self.site_by_category:
	    self.init_site_fieldmap(seed_type)

	if seed_type in self.site_by_category:
	    sites = self.site_by_category[seed_type]
	    for site_id in sites:
		site_profile = sites[site_id]
		site = self.get_site(site_id)
		if site is not None:
		    site.push(guid, data, site_profile)
Beispiel #2
0
class PublishServer():
    '''
    发布服务器, 每次采集成功后, 会调用此服务中的push转发到各个站点
    '''
    def __init__(self):
        '''
	初始化 把所有的网站都列出来, 并且进行数据推送
	'''
        #site cache
        self.sites = {}
        # site map cache by category, kaifu
        self.site_by_category = {}

        #初始化站点信息
        self.init_sites()
        self.mapdb = Site_map()

    def init_sites(self):
        '''
	初始化将所有的站点数据保存在sites中
	'''
        site_db = Site_Model()
        query = site_db.select()
        r = query.list()
        for site in r:
            if site and "id" in site:
                self.sites[site["id"]] = Site(site)

    def update_sites(self):
        '''
	这里更新需要做一次安全的检测。 当push不在调用的时候执行此函数
	'''
        self.init_sites()

    def get_site(self, site_id):
        '''
	get Site instance by site_id
	'''
        if site_id in self.sites:
            return self.sites[site_id]

    def init_site_fieldmap(self, seed_type):
        '''
	初始化站点字段映射表
	'''
        self.site_by_category[seed_type] = {}
        query = self.mapdb.select(where={"seed_type": seed_type},
                                  what="siteid",
                                  group="siteid")
        if len(query) > 0:
            r = query.list()
            for site in r:
                site_id = site["siteid"]
                #映射数据表
                fields = self.mapdb.select(where={
                    "seed_type": seed_type,
                    "siteid": site_id
                }).list()
                self.site_by_category[seed_type][site_id] = fields

    def update_site_fieldmap(self, seed_type):
        '''
	这里更新时候需要做安全检测
	'''

    def push(self, guid, data):
        '''
	发布接口
	将发布的数据解析类型。 根据类型找到site_id
	然后发布出去
	'''
        seed_type = data["type"]
        if seed_type not in self.site_by_category:
            self.init_site_fieldmap(seed_type)

        if seed_type in self.site_by_category:
            sites = self.site_by_category[seed_type]
            for site_id in sites:
                site_profile = sites[site_id]
                site = self.get_site(site_id)
                if site is not None:
                    site.push(guid, data, site_profile)