# -*- coding: utf-8 -*- from ops.mtga import FromTga, GetTgaConfig from ops.plog import define_logger import logging import datetime from ops.mmysql import MysqlBase import random define_logger("/data/logs/init_first_ad_channel.log") log = logging.getLogger(__name__) TimeDelay = 60*60 DB = {'user': 'mytga', 'pswd': 'gzVwh4HGR68G', 'host': '10.10.3.5', 'db': 'games_report'} class InitFirstAD(): def __init__(self, kwargs): self.end = kwargs.get('time') self.begin = (datetime.datetime.strptime(self.end, '%Y-%m-%d %H:%M:%S') - datetime.timedelta( minutes=TimeDelay)).strftime('%Y-%m-%d %H:%M:%S') self.gameid = kwargs.get('gameid') self.channelid = kwargs.get('channelid') g = GetTgaConfig() item = g.get_api_key(self.gameid) self.url = item['url'] self.tgaid = item['tgaid'] self.suffix = item.get('suffix', 0) self.api_key = item.get('api_key', None) self.tga = FromTga(self.url, self.api_key) self.mysql = MysqlBase(**DB) self.hide = 0.8 self.tga.init_tga_write(self.tgaid) def run(self): users = self.get_new_user() mark_users = self.hide_user(users) log.info(f"write {len(mark_users)} to mysql!") table_name = "newuser" if mark_users: for line in mark_users: try: temp = {} temp['gameid'] = self.gameid temp['channelid'] = self.channelid temp['accountid'], temp['register_time'] = line self.mysql.insert(table_name, temp) except Exception: log.error(f"insert {line} to mysql Failed !", exc_info=True) def hide_user(self, data): if data: line = len(data) nums = int(line * self.hide) if nums: return random.sample(data, nums) else: return None def get_new_user(self): rdata = [] sql = f"""SELECT "#account_id", account_register_time FROM v_user_{self.suffix} where gameid='{self.gameid}' AND "account_register_time" BETWEEN timestamp'{self.begin}' AND timestamp'{self.end}' """ data = self.tga.get_data(sql) if data: for line in data: if line: rdata.append(line) return rdata def main(): kwargs = {} kwargs['time'] = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") kwargs['gameid'] = 2001 kwargs['channelid'] = 6001 cc=InitFirstAD(kwargs) cc.run() if __name__ == "__main__": main()