def doSomeLogic(self): if not startup.IS_INIT_OK: print 'not init OK !!' try: self.finish() except: pass return try: taskarg = ftsvr.getTaskRunArg() heads = str(taskarg["userheader1"]) ftlog.debug('WriteTcpRequest 1->', taskarg, heads) _type, _group, rec_id = heads.split('_') global_conf = ftcon.getConf("freetime:global") data_dir = global_conf["data_path"] type_conf = ftcon.getConf("freetime:log_type") log_conf = type_conf[_type] rec_type = int(log_conf["rec_type"]) reserved_size = int(log_conf["reserved_size"]) log_size = int(log_conf["record_size"]) + reserved_size + self.EXTRA_SIZE record_count = log_conf["single_file_record_count"] body = base64.b64decode(taskarg["pack"]) ftlog.debug('WriteTcpRequest 2->', body) cur_time = int(time.time()) record = "tu" + struct.pack("<BIQ", rec_type, cur_time, int(rec_id)) + body + struct.pack( "<%ds" % reserved_size, str()) + "yo" self.writeFile(data_dir, _type, _group, int(rec_id), record_count, log_size, record) except: ftlog.error() finally: try: self.finish() except: pass
def doSomeLogic(self): if not startup.IS_INIT_OK : print 'not init OK !!' try: self.finish() except: pass return try: taskarg = ftsvr.getTaskRunArg() heads = str(taskarg["userheader1"]) ftlog.debug('WriteTcpRequest 1->', taskarg, heads) _type, _group, rec_id = heads.split('_') global_conf = ftcon.getConf("freetime:global") data_dir = global_conf["data_path"] type_conf = ftcon.getConf("freetime:log_type") log_conf = type_conf[_type] rec_type = int(log_conf["rec_type"]) reserved_size = int(log_conf["reserved_size"]) log_size = int(log_conf["record_size"]) + reserved_size + self.EXTRA_SIZE record_count = log_conf["single_file_record_count"] body = base64.b64decode(taskarg["pack"]) ftlog.debug('WriteTcpRequest 2->', body) cur_time = int(time.time()) record = "tu" + struct.pack("<BIQ", rec_type, cur_time, int(rec_id)) + body + struct.pack("<%ds"%reserved_size, str()) + "yo" self.writeFile(data_dir, _type, _group, int(rec_id), record_count, log_size, record) except: ftlog.error() finally: try: self.finish() except: pass
def _initialize(): global __datas if len(__datas) <= 0: ftlog.info('_initialize gdata begin.') __datas = {} pgdict = ftcon.getConf('poker:global') sid = ftcon.global_config["server_id"] __datas['server_type'] = sid[0:2] __datas['server_num'] = sid[2:] try: __datas['server_num_idx'] = int(sid[2:]) - 1 except: __datas['server_num_idx'] = -1 __datas.update(pgdict) __datas['game_packages'] = tuple(pgdict['game_packages']) mincenter = min(ftcon.server_type_map.get(SRV_TYPE_HTTP)) if mincenter == sid: __datas['is_control_process'] = 1 else: __datas['is_control_process'] = 0 __datas['is_http_process'] = 0 sdef = ftcon.server_map[sid] protocols = sdef.get('protocols') if protocols: server = protocols.get('server') if server: for p in server: if p.endswith('http'): __datas['is_http_process'] = 1 break _dumpGdataInfo() ftlog.info('_initialize gdata end.') return __datas
def getUserConnIpPortList(): ''' 取得客户端可接入的TCPIP的IP和端口号列表[(ip, port),(ip, port),(ip, port)...] ''' srvs = serverTypeMap() ipports = srvs.getExtendAttr('ipports') if not ipports: ipdict = {} machines = ftcon.getConf('poker:machine') for m in machines.values(): ipdict[m['internet']] = m['internet'] ipdict[m['intranet']] = m['internet'] ipports = [] connids = srvs[SRV_TYPE_CONN][:] connids.sort() servers = allServersMap() for connid in connids: srvconn = servers[connid] ip = ipdict[srvconn['ip']] port = srvconn['protocols']['server']['co-tcp'] ipports.append((ip, port)) srvs.setExtendAttr('ipports', ipports) return ipports
def _get(redisfullkey, defaultvalue=None, intClientidNum=None): ''' 获取数据 :param redisfullkey: :param defaultvalue: :param intClientidNum: :return: ''' if intClientidNum == None: rkey = redisfullkey else: rkey = redisfullkey + ':' + str(intClientidNum) if _CONFIG_CMD_PPS_: _configCmdPps(rkey) value = ftcon.getConf(rkey) if value == None: ftlog.debug('get configer->', rkey, 'is None !!') value = defaultvalue if value: if not isinstance(value, (list, dict)): raise Exception('the configer content is not list or dict !' + rkey) return value
def updateIndex(self, _type, _group, logid, pbody): type_conf = ftcon.getConf("freetime:log_type") if "index_field" in type_conf[_type]: need_index = type_conf[_type]["index_field"] timestamp = int(time.time()) key = "" for i in need_index: key += str(pbody[i]) + '.' ftsvr.doRedis(_group, "RPUSH", "index:%s:%s:%s" % (_group, _type, key[:-1]), timestamp, logid)
def doSomeLogic2(self): ftlog.info("MyProto do some logic in tasklet") #test redis aio ftsvr.doRedis("user01", "SET", "zx", 1) #Testing doHttp... #code, page = ftsvr.doHttp("GET", "http://www.google.com", # {'User-Agent': ['Twisted']}) #test connect timeout #code, page = ftsvr.doHttp("GET", "http://news.sina.com.cn/", # {'User-Agent': ['Twisted']}, '', 15, 0.1) #test request timeout #page = ftsvr.doHttp("GET", "http://news.sina.com.cn/sssss", # {'User-Agent': ['Twisted']}) #test 404 code, page = ftsvr.doHttp("POST", "http://127.0.0.1:8003/", {'User-Agent': ['Twisted']}, "HAHAHA") print code, page print "HTTP", code, len(page), page log_data = struct.pack("64s", "HAHAHA") ftlog.sendHttpLog("user01", "chip", log_data) #pipeline需要加锁,否则结果可能混乱,框架中已经加了lock,参见ftsvr代码 count = 1000 pipecount = 100 st = time.time() for x in xrange(count / pipecount): if x % 100 == 0: ftlog.info(x) pl = ftsvr.getRedisPipe("user01") for y in xrange(pipecount): pl.set("zx", 1) result = ftsvr.doRedisPipe(pl) if len(result) != pipecount: ftlog.debug("ERRORPIPELINE") ftlog.info("SetPerS:", count / (time.time() - st)) #test ftagent and udpquery ftlog.debug(ftcon.getConf("server"), caller=self) ftlog.debug(ftsvr.getTaskRunArg()) ftlog.debug(ftsvr.doUdpQuery("LO01", "abcdefgh")) ftlog.debug(ftagent.query("GA01", "TCPTCPSENDBYAGENT")) #test cron _tstr = time.strftime('%Y%m%d', time.localtime()) cron2 = FTCron( '{"times_in_day":{"first":"15:00","interval":5, "count":32},\ "days":{"first":"%s", "interval":"2m", "count":10}}' % (_tstr)) ftlog.debug(cron2.getTimeList(), cron2.getDaysList()) ftlog.debug("SEC=", cron2.getTodayNextLater()) #test timer tr = FTTimer(3, self.timerFunc, 1, 2, 3, aaa=111)
def _get(redisfullkey, defaultvalue=None, intClientidNum=None): if intClientidNum == None: rkey = redisfullkey else: rkey = redisfullkey + ':' + str(intClientidNum) if _CONFIG_CMD_PPS_: _configCmdPps(rkey) value = ftcon.getConf(rkey) if value == None: ftlog.debug('get configer->', rkey, 'is None !!') value = defaultvalue if value: if not isinstance(value, (list, dict)): raise Exception('the configer content is not list or dict !' + rkey) return value
def parseBody(self, body, _type): type_conf = ftcon.getConf("freetime:log_type") try: _conf = type_conf[_type] except: ftlog.error("type not config!", _type) return None try: _format = _conf["format"] _size = _conf["record_size"] except: ftlog.error("format or record_size not config!", _conf) return None if len(body) != _size: ftlog.error("log_size not match config!", body) return None try: pbody = struct.unpack(_format, body) return pbody except: ftlog.error("struct parse error!", _format, body) return None
def _initialize(): """初始化全局配置""" global _datas if len(_datas) <= 0: ftlog.info('_initialize gdata begin.') _datas = {} pgdict = ftcon.getConf('poker:global') sid = ftcon.global_config["server_id"] _datas['server_type'] = sid[0:2] # 服务类型 _datas['server_num'] = sid[2:] # 服务数量 try: _datas['server_num_idx'] = int(sid[2:]) - 1 # 服务的索引 except: _datas['server_num_idx'] = -1 _datas.update(pgdict) _datas['game_packages'] = tuple(pgdict['game_packages']) # 游戏包 mincenter = min(ftcon.server_type_map.get(SRV_TYPE_HTTP)) # 游戏的HTTP服务 if mincenter == sid: _datas['is_control_process'] = 1 # 是否控制处理服务器 else: _datas['is_control_process'] = 0 _datas['is_http_process'] = 0 sdef = ftcon.server_map[sid] protocols = sdef.get('protocols') # 协议 if protocols: server = protocols.get('server') # 服务器 if server: for p in server: if p.endswith('http'): _datas['is_http_process'] = 1 # 是否是http服务 break _dumpGdataInfo() ftlog.info('_initialize gdata end.') return _datas