• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Python server_pool.ServerPool类代码示例

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

本文整理汇总了Python中server_pool.ServerPool的典型用法代码示例。如果您正苦于以下问题:Python ServerPool类的具体用法?Python ServerPool怎么用?Python ServerPool使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。



在下文中一共展示了ServerPool类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Python代码示例。

示例1: new_server

	def new_server(self, port, passwd, cfg):
		protocol = cfg.get('protocol', ServerPool.get_instance().config.get('protocol', 'origin'))
		method = cfg.get('method', ServerPool.get_instance().config.get('method', 'None'))
		obfs = cfg.get('obfs', ServerPool.get_instance().config.get('obfs', 'plain'))
		logging.info('db start server at port [%s] pass [%s] protocol [%s] method [%s] obfs [%s]' % (port, passwd, protocol, method, obfs))
		ServerPool.get_instance().new_server(port, cfg)
		self.force_update_transfer.add(port)
开发者ID:xcracker,项目名称:autoss,代码行数:7,代码来源:db_transfer.py


示例2: thread_db

	def thread_db(obj):
		import socket
		import time
		global db_instance
		timeout = 60
		socket.setdefaulttimeout(timeout)
		last_rows = []
		db_instance = obj()
		ServerPool.get_instance()
		shell.log_shadowsocks_version()
		import resource
		logging.info('current process RLIMIT_NOFILE resource: soft %d hard %d'  % resource.getrlimit(resource.RLIMIT_NOFILE))
		try:
			while True:
				load_config()
				db_instance.load_cfg()
				try:
					db_instance.push_db_all_user()
					rows = db_instance.pull_db_all_user()
					if rows:
						db_instance.pull_ok = True
					db_instance.del_server_out_of_bound_safe(last_rows, rows)
					last_rows = rows
				except Exception as e:
					trace = traceback.format_exc()
					logging.error(trace)
					#logging.warn('db thread except:%s' % e)
				if db_instance.event.wait(get_config().UPDATE_TIME) or not ServerPool.get_instance().thread.is_alive():
					break
		except KeyboardInterrupt as e:
			pass
		db_instance.del_servers()
		ServerPool.get_instance().stop()
		db_instance = None
开发者ID:luffySaw,项目名称:shadowsocks-R,代码行数:34,代码来源:db_transfer.py


示例3: del_server_out_of_bound_safe

 def del_server_out_of_bound_safe(rows):
     # 停止超流量的服务
     # 启动没超流量的服务
     for row in rows:
         if ServerPool.get_instance().server_is_run(row[0]):
             if row[1] + row[2] >= row[3]:
                 logging.info("db stop server at port [%s]" % (row[0]))
                 ServerPool.get_instance().del_server(row[0])
         else:
             if row[5] == 1 and row[6] == 1 and row[1] + row[2] < row[3]:
                 logging.info("db start server at port [%s] pass [%s]" % (row[0], row[4]))
                 ServerPool.get_instance().new_server(row[0], row[4])
开发者ID:ayongw,项目名称:shadowsocks-csharp-server,代码行数:12,代码来源:db_transfer.py


示例4: del_servers

	def del_servers():
		for port in [v for v in ServerPool.get_instance().tcp_servers_pool.keys()]:
			if ServerPool.get_instance().server_is_run(port) > 0:
				ServerPool.get_instance().cb_del_server(port)
		for port in [v for v in ServerPool.get_instance().tcp_ipv6_servers_pool.keys()]:
			if ServerPool.get_instance().server_is_run(port) > 0:
				ServerPool.get_instance().cb_del_server(port)
开发者ID:luffySaw,项目名称:shadowsocks-R,代码行数:7,代码来源:db_transfer.py


示例5: thread_db

	def thread_db(obj):
		import socket
		import time
		global db_instance
		timeout = 60
		socket.setdefaulttimeout(timeout)
		last_rows = []
		db_instance = obj()
		ServerPool.get_instance()
		shell.log_shadowsocks_version()

		try:
			import resource
			logging.info('current process RLIMIT_NOFILE resource: soft %d hard %d'  % resource.getrlimit(resource.RLIMIT_NOFILE))
		except:
			pass

		try:
			while True:
				load_config()
				db_instance.load_cfg()
				try:
					db_instance.push_db_all_user()
					rows = db_instance.pull_db_all_user()
					if rows:
						db_instance.pull_ok = True
						config = shell.get_config(False)
						for port in config['additional_ports']:
							val = config['additional_ports'][port]
							val['port'] = int(port)
							val['enable'] = 1
							val['transfer_enable'] = 1024 ** 7
							val['u'] = 0
							val['d'] = 0
							if "password" in val:
								val["passwd"] = val["password"]
							rows.append(val)
					db_instance.del_server_out_of_bound_safe(last_rows, rows)
					last_rows = rows
				except Exception as e:
					trace = traceback.format_exc()
					logging.error(trace)
					#logging.warn('db thread except:%s' % e)
				if db_instance.event.wait(get_config().UPDATE_TIME) or not ServerPool.get_instance().thread.is_alive():
					break
		except KeyboardInterrupt as e:
			pass
		db_instance.del_servers()
		ServerPool.get_instance().stop()
		db_instance = None
开发者ID:chasenn,项目名称:Shadowsowcks1Click,代码行数:50,代码来源:db_transfer.py


示例6: push_db_all_user

    def push_db_all_user(self):
        #更新用户流量到数据库
        last_transfer = self.last_get_transfer
        curr_transfer = ServerPool.get_instance().get_servers_transfer()
        #上次和本次的增量
        dt_transfer = {}
        for id in curr_transfer.keys():
            if id in last_transfer:
                if last_transfer[id][0] == curr_transfer[id][0] and last_transfer[id][1] == curr_transfer[id][1]:
                    continue
                elif curr_transfer[id][0] == 0 and curr_transfer[id][1] == 0:
                    continue
                elif last_transfer[id][0] <= curr_transfer[id][0] and \
                last_transfer[id][1] <= curr_transfer[id][1]:
                    dt_transfer[id] = [curr_transfer[id][0] - last_transfer[id][0],
                                       curr_transfer[id][1] - last_transfer[id][1]]
                else:
                    dt_transfer[id] = [curr_transfer[id][0], curr_transfer[id][1]]
            else:
                if curr_transfer[id][0] == 0 and curr_transfer[id][1] == 0:
                    continue
                dt_transfer[id] = [curr_transfer[id][0], curr_transfer[id][1]]

        self.last_get_transfer = curr_transfer

        for id in dt_transfer.keys():
            ins = SSInstance.objects.get(port=id)
            # print u
            ins.u += dt_transfer[id][0]
            ins.d += dt_transfer[id][1]
            # print u
            ins.save()
开发者ID:josephwuzw,项目名称:shadowsocks,代码行数:32,代码来源:db_transfer.py


示例7: push_db_all_user

    def push_db_all_user(self):
        #更新用户流量到数据库
        last_transfer = self.last_get_transfer
        curr_transfer = ServerPool.get_instance().get_servers_transfer()
        #上次和本次的增量
        dt_transfer = {}
        for id in curr_transfer.keys():
            if id in last_transfer:
                if last_transfer[id][0] == curr_transfer[id][0] and last_transfer[id][1] == curr_transfer[id][1]:
                    continue
                elif curr_transfer[id][0] == 0 and curr_transfer[id][1] == 0:
                    continue
                elif last_transfer[id][0] <= curr_transfer[id][0] and \
                last_transfer[id][1] <= curr_transfer[id][1]:
                    dt_transfer[id] = [curr_transfer[id][0] - last_transfer[id][0],
                                       curr_transfer[id][1] - last_transfer[id][1]]
                else:
                    dt_transfer[id] = [curr_transfer[id][0], curr_transfer[id][1]]
            else:
                if curr_transfer[id][0] == 0 and curr_transfer[id][1] == 0:
                    continue
                dt_transfer[id] = [curr_transfer[id][0], curr_transfer[id][1]]

        self.last_get_transfer = curr_transfer
        query_head = 'UPDATE users'
        query_sub_when = ''
        query_sub_when2 = ''
        query_sub_when3 = ''
        query_sub_in = None
        last_time = time.time()
        for id in dt_transfer.keys():
            totalU = dt_transfer[id][0]
            totalD = dt_transfer[id][1]
            query_sub_when += ' WHEN %s THEN u+%s' % (id, totalU)
            query_sub_when2 += ' WHEN %s THEN d+%s' % (id, totalD)
            query_sub_when3 += ' WHEN %s THEN total_transfer+%s' % (id, totalD+totalU)
            if query_sub_in is not None:
                query_sub_in += ',%s' % id
            else:
                query_sub_in = '%s' % id
        if query_sub_when == '':
            return
        query_sql = query_head + ' SET u = CASE port' + query_sub_when + \
                    ' END, d = CASE port' + query_sub_when2 + \
                    ' END, total_transfer = CASE port' + query_sub_when3 + \
                    ' END, t = ' + str(int(last_time)) + \
                    ' WHERE port IN (%s)' % query_sub_in
        #print query_sql
        conn = cymysql.connect(host=Config.MYSQL_HOST, port=Config.MYSQL_PORT, user=Config.MYSQL_USER,
                               passwd=Config.MYSQL_PASS, db=Config.MYSQL_DB, charset='utf8')
        cur = conn.cursor()
        cur.execute(query_sql)
        cur.close()
        conn.commit()
        conn.close()
开发者ID:spoonwep,项目名称:shadowsocks,代码行数:55,代码来源:db_transfer.py


示例8: push_db_all_user

	def push_db_all_user(self):
		#更新用户流量到数据库
		last_transfer = self.last_get_transfer
		curr_transfer = ServerPool.get_instance().get_servers_transfer()
		#上次和本次的增量
		dt_transfer = {}
		for id in curr_transfer.keys():
			if id in last_transfer:
				if last_transfer[id][0] == curr_transfer[id][0] and last_transfer[id][1] == curr_transfer[id][1]:
					continue
				elif curr_transfer[id][0] == 0 and curr_transfer[id][1] == 0:
					continue
				elif last_transfer[id][0] <= curr_transfer[id][0] and \
				last_transfer[id][1] <= curr_transfer[id][1]:
					dt_transfer[id] = [int((curr_transfer[id][0] - last_transfer[id][0]) * Config.TRANSFER_MUL),
										int((curr_transfer[id][1] - last_transfer[id][1]) * Config.TRANSFER_MUL)]
				else:
					dt_transfer[id] = [int(curr_transfer[id][0] * Config.TRANSFER_MUL),
										int(curr_transfer[id][1] * Config.TRANSFER_MUL)]
			else:
				if curr_transfer[id][0] == 0 and curr_transfer[id][1] == 0:
					continue
				dt_transfer[id] = [int(curr_transfer[id][0] * Config.TRANSFER_MUL),
									int(curr_transfer[id][1] * Config.TRANSFER_MUL)]

		query_head = 'UPDATE member'
		query_sub_when = ''
		query_sub_when2 = ''
		query_sub_in = None
		last_time = time.time()
		for id in dt_transfer.keys():
			if dt_transfer[id][0] == 0 and dt_transfer[id][1] == 0:
				continue
			query_sub_when += ' WHEN %s THEN flow_up+%s' % (id, dt_transfer[id][0])
			query_sub_when2 += ' WHEN %s THEN flow_down+%s' % (id, dt_transfer[id][1])
			if query_sub_in is not None:
				query_sub_in += ',%s' % id
			else:
				query_sub_in = '%s' % id
		if query_sub_when == '':
			return
		query_sql = query_head + ' SET flow_up = CASE port' + query_sub_when + \
					' END, flow_down = CASE port' + query_sub_when2 + \
					' END, lastConnTime = ' + str(int(last_time)) + \
					' WHERE port IN (%s)' % query_sub_in
		#print query_sql
		conn = cymysql.connect(host=Config.MYSQL_HOST, port=Config.MYSQL_PORT, user=Config.MYSQL_USER,
								passwd=Config.MYSQL_PASS, db=Config.MYSQL_DB, charset='utf8')
		cur = conn.cursor()
		cur.execute(query_sql)
		cur.close()
		conn.commit()
		conn.close()
		self.last_get_transfer = curr_transfer
开发者ID:ss-share,项目名称:ss-share.github.io,代码行数:54,代码来源:db_transfer.py


示例9: del_server_out_of_bound_safe

 def del_server_out_of_bound_safe(rows):
 #停止超流量的服务
 #启动没超流量的服务
 #修改下面的逻辑要小心包含跨线程访问
     for row in rows:
         if ServerPool.get_instance().server_is_run(row[0]) is True:
             if row[5] == 0 or row[6] == 0:
                 #stop disable or switch off user
                 logging.info('db stop server at port [%s] reason: disable' % (row[0]))
                 ServerPool.get_instance().del_server(row[0])
             elif row[1] + row[2] >= row[3]:
                 #stop out bandwidth user
                 logging.info('db stop server at port [%s] reason: out bandwidth' % (row[0]))
                 ServerPool.get_instance().del_server(row[0])
             if ServerPool.get_instance().tcp_servers_pool[row[0]]._config['password'] != row[4]:
                 #password changed
                 logging.info('db stop server at port [%s] reason: password changed' % (row[0]))
                 ServerPool.get_instance().del_server(row[0]) 
         else:
             if row[5] == 1 and row[6] == 1 and row[1] + row[2] < row[3]:
                 logging.info('db start server at port [%s] pass [%s]' % (row[0], row[4]))
                 ServerPool.get_instance().new_server(row[0], row[4])
开发者ID:osdebianly,项目名称:laravel-many-user-shadowsocks,代码行数:22,代码来源:db_transfer.py


示例10: thread_db

	def thread_db():
		import socket
		import time
		timeout = 60
		socket.setdefaulttimeout(timeout)
		last_rows = []
		try:
			while True:
				reload(Config)
				try:
					DbTransfer.get_instance().push_db_all_user()
					rows = DbTransfer.get_instance().pull_db_all_user()
					DbTransfer.del_server_out_of_bound_safe(last_rows, rows)
					last_rows = rows
				except Exception as e:
					trace = traceback.format_exc()
					logging.error(trace)
					#logging.warn('db thread except:%s' % e)
				if DbTransfer.get_instance().event.wait(Config.MYSQL_UPDATE_TIME) or not ServerPool.get_instance().thread.is_alive():
					break
		except KeyboardInterrupt as e:
			pass
		DbTransfer.del_servers()
		ServerPool.get_instance().stop()
开发者ID:ss-share,项目名称:ss-share.github.io,代码行数:24,代码来源:db_transfer.py


示例11: push_db_all_user

	def push_db_all_user(self):
		if self.pull_ok is False:
			return
		#更新用户流量到数据库
		last_transfer = self.last_update_transfer
		curr_transfer = ServerPool.get_instance().get_servers_transfer()
		#上次和本次的增量
		dt_transfer = {}
		for id in self.force_update_transfer: #此表中的用户统计上次未计入的流量
			if id in self.last_get_transfer and id in last_transfer:
				dt_transfer[id] = [self.last_get_transfer[id][0] - last_transfer[id][0], self.last_get_transfer[id][1] - last_transfer[id][1]]

		for id in curr_transfer.keys():
			if id in self.force_update_transfer:
				continue
			#算出与上次记录的流量差值,保存于dt_transfer表
			if id in last_transfer:
				if curr_transfer[id][0] + curr_transfer[id][1] - last_transfer[id][0] - last_transfer[id][1] <= 0:
					continue
				dt_transfer[id] = [curr_transfer[id][0] - last_transfer[id][0],
								curr_transfer[id][1] - last_transfer[id][1]]
			else:
				if curr_transfer[id][0] + curr_transfer[id][1] <= 0:
					continue
				dt_transfer[id] = [curr_transfer[id][0], curr_transfer[id][1]]

			#有流量的,先记录在线状态
			if id in self.last_get_transfer:
				if curr_transfer[id][0] + curr_transfer[id][1] > self.last_get_transfer[id][0] + self.last_get_transfer[id][1]:
					self.onlineuser_cache[id] = curr_transfer[id][0] + curr_transfer[id][1]
			else:
				self.onlineuser_cache[id] = curr_transfer[id][0] + curr_transfer[id][1]

		self.onlineuser_cache.sweep()

		update_transfer = self.update_all_user(dt_transfer) #返回有更新的表
		for id in update_transfer.keys(): #其增量加在此表
			if id not in self.force_update_transfer: #但排除在force_update_transfer内的
				last = self.last_update_transfer.get(id, [0,0])
				self.last_update_transfer[id] = [last[0] + update_transfer[id][0], last[1] + update_transfer[id][1]]
		self.last_get_transfer = curr_transfer
		for id in self.force_update_transfer:
			if id in self.last_update_transfer:
				del self.last_update_transfer[id]
			if id in self.last_get_transfer:
				del self.last_get_transfer[id]
		self.force_update_transfer = set()
开发者ID:luffySaw,项目名称:shadowsocks-R,代码行数:47,代码来源:db_transfer.py


示例12: render_GET

 def render_GET(self, request):
     retcode = 1
     retmsg = 'unknow err'
     if request.uri.startswith('/cmd/del_server'):
         while True:
             try:
                 if not 'key' in request.args or Config.REST_APIKEY != request.args['key'][0]:
                     retmsg = 'key error'
                     break
                 port = int(request.args['port'][0])
                 if ServerPool.get_instance().del_server(port) is True:
                     retcode = 0
                     retmsg = 'success'
             except Exception, e:
                 retmsg = str(e)
             finally:
                 break
开发者ID:ayongw,项目名称:shadowsocks-csharp-server,代码行数:17,代码来源:restful_cmd.py


示例13: del_server_out_of_bound_safe

 def del_server_out_of_bound_safe(rows):
 #停止超流量的服务
 #启动没超流量的服务
     for row in rows:
         if ServerPool.get_instance().server_is_run(row['port']) > 0:
             if row['u'] + row['d'] >= row['transfer_enable'] or (not row['enable']):
                 logging.info('db stop server at port [%s]' % (row['port']))
                 ServerPool.get_instance().del_server(row['port'])
         elif ServerPool.get_instance().server_run_status(row['port']) is False:
             if row['switch'] and row['enable'] and  row['u'] + row['d'] < row['transfer_enable']:
                 logging.info('db start server at port [%s] pass [%s]' % (row['port'], row['passwd']))
                 ServerPool.get_instance().new_server(row['port'], row['passwd'])
开发者ID:josephwuzw,项目名称:shadowsocks,代码行数:12,代码来源:db_transfer.py


示例14: del_server_out_of_bound_safe

    def del_server_out_of_bound_safe(rows):
    #停止超流量的服务
    #启动没超流量的服务
        for row in rows:
            if ServerPool.get_instance().server_is_run(row[0]) > 0:
		if ((row[1] + row[2] >= row[3]) or (row[5] == 0)):
                    logging.info('db stop server at port [%s]' % (row[0]))
                    ServerPool.get_instance().del_server(row[0])
            elif ServerPool.get_instance().server_run_status(row[0]) is False:
                if row[5] == 1 and  row[1] + row[2] < row[3]:
                    logging.info('db start server at port [%s] pass [%s]' % (row[0], row[4]))
                    ServerPool.get_instance().new_server(row[0], row[4])
开发者ID:alphabity,项目名称:shadowsocks,代码行数:12,代码来源:db_transfer.py


示例15: del_server_out_of_bound_safe

    def del_server_out_of_bound_safe(rows):
    #停止超流量的服务
    #启动没超流量的服务
        for row in rows:
            if ServerPool.get_instance().server_is_run(row[0]) > 0:

                if datetime.datetime.now() >= row[7]:
                #if row[1] + row[2] >= row[3] and lasttime >= row[7]:
                    logging.info('db stop server at port [%s]' % (row[0]))
                    ServerPool.get_instance().del_server(row[0])
            elif ServerPool.get_instance().server_run_status(row[0]) is False:
                if row[5] == 1 and row[6] == 1 and  datetime.datetime.now() < row[7]:
                    logging.info('db start server at port [%s] pass [%s]' % (row[0], row[4]))
                    ServerPool.get_instance().new_server(row[0], row[4])
开发者ID:rexchou,项目名称:shadowsocks-manyuser,代码行数:14,代码来源:db_transfer.py


示例16: del_server_out_of_bound_safe

    def del_server_out_of_bound_safe(rows, mids):
    #停止超流量的服务
    #启动没超流量的服务

        port_is_running = []
        for row in rows:
            if ServerPool.get_instance().server_is_run(row[0]) > 0:
                if row[1] + row[2] >= row[3] or row[5] != 1 or row[7] not in mids:
                    logging.info('db stop server at port [%s]' % (row[0]))
                    #原来这里使用的是del_server方法,不适用,无法进行删除,修改成cb_del_server后可行
                    ServerPool.get_instance().cb_del_server(row[0])
                else:
                    port_is_running.append(row[0])
                    
            elif ServerPool.get_instance().server_run_status(row[0]) is False:
                if row[5] == 1 and  row[1] + row[2] < row[3] and row[7] in mids:
                    logging.info('db start server at port [%s] pass [%s]' % (row[0], row[4]))
                    ServerPool.get_instance().new_server(row[0], row[4])
        return port_is_running
开发者ID:GreatHumorist,项目名称:Shadowsock-msmu,代码行数:19,代码来源:db_transfer.py


示例17: del_server_out_of_bound_safe

    def del_server_out_of_bound_safe(rows):
        """
        #增加了检查用户类型
        #增加了检用服务器类型,只有服务器类型与当用vip类型一致才启动服务
        #停止超流量的服务
        #启动没超流量的服务
        #增加试用的逻辑 -9

        if int(row[7]) != Config.SERVER_TYPE or ( (row[7] > 1 and row[1] + row[2] >= row[3] ) or row[6] != 1):

        if int(row[7]) == Config.SERVER_TYPE and ( row[5] == 1 and row[6] == 1 and ( row[1] + row[2] < row[3] and row[7] > 1)):
        """
        for row in rows:

            if ServerPool.get_instance().server_is_run(row[0]) > 0:
                if row[6] != -9 and row[6] != 1:
                    logging.info('db stop server at port [%s]' % (row[0]))
                    ServerPool.get_instance().del_server(row[0])

            elif ServerPool.get_instance().server_run_status(row[0]) is False:
                if row[6] == -9 or row[6] == 1:
                    logging.info('db start server at port [%s] pass [%s]' % (row[0], row[4]))
                    ServerPool.get_instance().new_server(row[0], row[4])
开发者ID:cmzz,项目名称:shadowsocks,代码行数:23,代码来源:db_transfer.py


示例18: del_server_out_of_bound_safe

	def del_server_out_of_bound_safe(self, last_rows, rows):
		#停止超流量的服务
		#启动没超流量的服务
		try:
			switchrule = importloader.load('switchrule')
		except Exception as e:
			logging.error('load switchrule.py fail')
		cur_servers = {}
		new_servers = {}
		allow_users = {}
		mu_servers  = {}
		config = shell.get_config(False)
		for row in rows:
			try:
				allow = switchrule.isTurnOn(row) and row['enable'] == 1 and row['u'] + row['d'] < row['transfer_enable']
			except Exception as e:
				allow = False

			port = row['port']
			passwd = common.to_bytes(row['passwd'])
			if hasattr(passwd, 'encode'):
				passwd = passwd.encode('utf-8')
			cfg = {'password': passwd}
			if 'id' in row:
				self.port_uid_table[row['port']] = row['id']

			read_config_keys = ['method', 'obfs', 'obfs_param', 'protocol', 'protocol_param', 'forbidden_ip', 'forbidden_port', 'speed_limit_per_con', 'speed_limit_per_user']
			for name in read_config_keys:
				if name in row and row[name]:
					cfg[name] = row[name]

			merge_config_keys = ['password'] + read_config_keys
			for name in cfg.keys():
				if hasattr(cfg[name], 'encode'):
					try:
						cfg[name] = cfg[name].encode('utf-8')
					except Exception as e:
						logging.warning('encode cfg key "%s" fail, val "%s"' % (name, cfg[name]))

			if port not in cur_servers:
				cur_servers[port] = passwd
			else:
				logging.error('more than one user use the same port [%s]' % (port,))
				continue

			if 'protocol' in cfg and 'protocol_param' in cfg and common.to_str(cfg['protocol']) in obfs.mu_protocol():
				if '#' in common.to_str(cfg['protocol_param']):
					mu_servers[port] = passwd
					allow = True

			if allow:
				if port not in mu_servers:
					allow_users[port] = cfg

				cfgchange = False
				if port in ServerPool.get_instance().tcp_servers_pool:
					relay = ServerPool.get_instance().tcp_servers_pool[port]
					for name in merge_config_keys:
						if name in cfg and not self.cmp(cfg[name], relay._config[name]):
							cfgchange = True
							break
				if not cfgchange and port in ServerPool.get_instance().tcp_ipv6_servers_pool:
					relay = ServerPool.get_instance().tcp_ipv6_servers_pool[port]
					for name in merge_config_keys:
						if (name in cfg) and ((name not in relay._config) or not self.cmp(cfg[name], relay._config[name])):
							cfgchange = True
							break

			if port in mu_servers:
				if ServerPool.get_instance().server_is_run(port) > 0:
					if cfgchange:
						logging.info('db stop server at port [%s] reason: config changed: %s' % (port, cfg))
						ServerPool.get_instance().cb_del_server(port)
						self.force_update_transfer.add(port)
						new_servers[port] = (passwd, cfg)
				else:
					self.new_server(port, passwd, cfg)
			else:
				if ServerPool.get_instance().server_is_run(port) > 0:
					if config['additional_ports_only'] or not allow:
						logging.info('db stop server at port [%s]' % (port,))
						ServerPool.get_instance().cb_del_server(port)
						self.force_update_transfer.add(port)
					else:
						if cfgchange:
							logging.info('db stop server at port [%s] reason: config changed: %s' % (port, cfg))
							ServerPool.get_instance().cb_del_server(port)
							self.force_update_transfer.add(port)
							new_servers[port] = (passwd, cfg)

				elif not config['additional_ports_only'] and allow and port > 0 and port < 65536 and ServerPool.get_instance().server_run_status(port) is False:
					self.new_server(port, passwd, cfg)

		for row in last_rows:
			if row['port'] in cur_servers:
				pass
			else:
				logging.info('db stop server at port [%s] reason: port not exist' % (row['port']))
				ServerPool.get_instance().cb_del_server(row['port'])
				self.clear_cache(row['port'])
#.........这里部分代码省略.........
开发者ID:chasenn,项目名称:Shadowsowcks1Click,代码行数:101,代码来源:db_transfer.py


示例19: del_server_out_of_bound_safe

	def del_server_out_of_bound_safe(last_rows, rows):
		#停止超流量的服务
		#启动没超流量的服务
		#需要动态载入switchrule,以便实时修改规则
		try:
			import switchrule
			reload(switchrule)
		except Exception as e:
			logging.error('load switchrule.py fail')
		cur_servers = {}
		for row in rows:
			try:
				allow = switchrule.isTurnOn(row) and row['enable'] == 1 and row['u'] + row['d'] < row['transfer_enable']
			except Exception as e:
				allow = False

			port = row['port']
			passwd = row['passwd']
			cur_servers[port] = passwd

			if ServerPool.get_instance().server_is_run(port) > 0:
				if not allow:
					logging.info('db stop server at port [%s]' % (port,))
					ServerPool.get_instance().cb_del_server(port)
				elif (port in ServerPool.get_instance().tcp_servers_pool and ServerPool.get_instance().tcp_servers_pool[port]._config['password'] != passwd) \
					or (port in ServerPool.get_instance().tcp_ipv6_servers_pool and ServerPool.get_instance().tcp_ipv6_servers_pool[port]._config['password'] != passwd):
					#password changed
					logging.info('db stop server at port [%s] reason: password changed' % (port,))
					ServerPool.get_instance().cb_del_server(port)
					ServerPool.get_instance().new_server(port, passwd)

			elif allow and ServerPool.get_instance().server_run_status(port) is False:
				logging.info('db start server at port [%s] pass [%s]' % (port, passwd))
				ServerPool.get_instance().new_server(port, passwd)

		for row in last_rows:
			if row['port'] in cur_servers:
				pass
			else:
				logging.info('db stop server at port [%s] reason: port not exist' % (row['port']))
				ServerPool.get_instance().cb_del_server(row['port'])
开发者ID:falseen,项目名称:ss-exe,代码行数:41,代码来源:db_transfer.py


示例20: del_server_out_of_bound_safe

	def del_server_out_of_bound_safe(self, last_rows, rows):
		#停止超流量的服务
		#启动没超流量的服务
		try:
			switchrule = importloader.load('switchrule')
		except Exception as e:
			logging.error('load switchrule.py fail')
		cur_servers = {}
		new_servers = {}
		for row in rows:
			try:
				allow = switchrule.isTurnOn(row) and row['enable'] == 1 and row['u'] + row['d'] < row['transfer_enable']
			except Exception as e:
				allow = False

			port = row['port']
			passwd = common.to_bytes(row['passwd'])
			cfg = {'password': passwd}
			if 'id' in row:
				self.port_uid_table[row['port']] = row['id']

			read_config_keys = ['method', 'obfs', 'obfs_param', 'protocol', 'protocol_param', 'forbidden_ip', 'forbidden_port']
			for name in read_config_keys:
				if name in row and row[name]:
					cfg[name] = row[name]

			merge_config_keys = ['password'] + read_config_keys
			for name in cfg.keys():
				if hasattr(cfg[name], 'encode'):
					cfg[name] = cfg[name].encode('utf-8')

			if port not in cur_servers:
				cur_servers[port] = passwd
			else:
				logging.error('more than one user use the same port [%s]' % (port,))
				continue

			if ServerPool.get_instance().server_is_run(port) > 0:
				if not allow:
					logging.info('db stop server at port [%s]' % (port,))
					ServerPool.get_instance().cb_del_server(port)
					self.force_update_transfer.add(port)
				else:
					cfgchange = False
					if port in ServerPool.get_instance().tcp_servers_pool:
						relay = ServerPool.get_instance().tcp_servers_pool[port]
						for name in merge_config_keys:
							if name in cfg and not self.cmp(cfg[name], relay._config[name]):
								cfgchange = True
								break;
					if not cfgchange and port in ServerPool.get_instance().tcp_ipv6_servers_pool:
						relay = ServerPool.get_instance().tcp_ipv6_servers_pool[port]
						for name in merge_config_keys:
							if name in cfg and not self.cmp(cfg[name], relay._config[name]):
								cfgchange = True
								break;
					#config changed
					if cfgchange:
						logging.info('db stop server at port [%s] reason: config changed: %s' % (port, cfg))
						ServerPool.get_instance().cb_del_server(port)
						self.force_update_transfer.add(port)
						new_servers[port] = (passwd, cfg)

			elif allow and ServerPool.get_instance().server_run_status(port) is False:
				self.new_server(port, passwd, cfg)

		for row in last_rows:
			if row['port'] in cur_servers:
				pass
			else:
				logging.info('db stop server at port [%s] reason: port not exist' % (row['port']))
				ServerPool.get_instance().cb_del_server(row['port'])
				self.clear_cache(row['port'])
				if row['port'] in self.port_uid_table:
					del self.port_uid_table[row['port']]

		if len(new_servers) > 0:
			from shadowsocks import eventloop
			self.event.wait(eventloop.TIMEOUT_PRECISION + eventloop.TIMEOUT_PRECISION / 2)
			for port in new_servers.keys():
				passwd, cfg = new_servers[port]
				self.new_server(port, passwd, cfg)
开发者ID:luffySaw,项目名称:shadowsocks-R,代码行数:82,代码来源:db_transfer.py



注:本文中的server_pool.ServerPool类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
Python server_support.print_error_log函数代码示例发布时间:2022-05-27
下一篇:
Python server_mgr_logger.ServerMgrlogger类代码示例发布时间:2022-05-27
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap