130 lines
3.7 KiB
Python
130 lines
3.7 KiB
Python
# -*- coding: utf-8 -*-
|
|
from ops.plog import define_logger
|
|
import logging
|
|
import datetime
|
|
from ops.mmysql import MysqlBase
|
|
import pdb
|
|
|
|
define_logger("/data/logs/gather_new_user.log")
|
|
log = logging.getLogger(__name__)
|
|
TimeDelay = 10
|
|
|
|
DB = {'user': 'mytga', 'pswd': 'gzVwh4HGR68G', 'host': '10.10.3.5', 'db': 'test'}
|
|
|
|
mydb = MysqlBase(**DB)
|
|
|
|
|
|
def get_last_time(gameid, channelid, ad_channel):
|
|
sql = f"""SELECT
|
|
last_time
|
|
FROM
|
|
newusers_line
|
|
where
|
|
gameid={gameid}
|
|
and channelid={channelid}
|
|
and ad_channel='{ad_channel}'
|
|
ORDER BY
|
|
last_time DESC LIMIT 1"""
|
|
data = mydb.query(sql)
|
|
try:
|
|
if not data:
|
|
last_time = "2019-08-30 00:00:00"
|
|
else:
|
|
last_time = data[0][0].strftime("%Y-%m-%d %H:%M:%S")
|
|
except Exception:
|
|
log.info("get last time form db failed!", exc_info=True)
|
|
last_time = None
|
|
return last_time
|
|
|
|
|
|
def comp_datetime(x, y):
|
|
xx = datetime.datetime.strptime(x, "%Y-%m-%d %H:%M:%S")
|
|
yy = datetime.datetime.strptime(y, "%Y-%m-%d %H:%M:%S")
|
|
if xx - datetime.timedelta(minutes=TimeDelay) > yy:
|
|
return True
|
|
else:
|
|
return False
|
|
|
|
|
|
def get_ad_chanllel(gameid):
|
|
sql = f"select distinct ad_channel from newuser where gameid={gameid};"
|
|
data = mydb.query(sql)
|
|
ad_channel = []
|
|
if data:
|
|
for line in data:
|
|
try:
|
|
ad_channel.append(line[0])
|
|
except Exception:
|
|
log.info(f"split data error,{line}", exc_info=True)
|
|
return ad_channel
|
|
|
|
|
|
def gather_data(last_time, gameid, channelid, ad_channel):
|
|
begin = (datetime.datetime.strptime(last_time, "%Y-%m-%d %H:%M:%S") - datetime.timedelta(
|
|
minutes=TimeDelay)).strftime("%Y-%m-%d %H:%M:%S")
|
|
total_user_sql = f"""select
|
|
count(accountid)
|
|
from
|
|
newuser
|
|
where
|
|
gameid={gameid}
|
|
AND channelid={channelid}
|
|
AND ad_channel='{ad_channel}'
|
|
AND register_time <'{last_time}'"""
|
|
|
|
try:
|
|
data = mydb.query(total_user_sql)
|
|
total_user = data[0][0]
|
|
except Exception:
|
|
log.error(f"get total user failed!{data}")
|
|
total_user = 0
|
|
|
|
new_user_sql = f"""select
|
|
count(accountid)
|
|
from
|
|
newuser
|
|
where
|
|
gameid={gameid}
|
|
AND channelid={channelid}
|
|
AND ad_channel='{ad_channel}'
|
|
AND register_time > '{begin}' AND register_time<'{last_time}'"""
|
|
try:
|
|
data = mydb.query(new_user_sql)
|
|
new_user = data[0][0]
|
|
except Exception:
|
|
log.error(f"get total user failed!{data}")
|
|
new_user = 0
|
|
table_name = 'newusers_line'
|
|
temp = {}
|
|
temp['gameid'] = gameid
|
|
temp['channelid'] = channelid
|
|
temp['ad_channel'] = ad_channel
|
|
temp['new_user'] = new_user
|
|
temp['total_user'] = total_user
|
|
temp['last_time'] = last_time
|
|
mydb.insert(table_name, temp)
|
|
|
|
|
|
|
|
def run(gameid, channelid, ad_channel):
|
|
now = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
|
|
last_time = get_last_time(gameid, channelid, ad_channel)
|
|
if not last_time:
|
|
raise Exception("last_time get failed")
|
|
while comp_datetime(now, last_time):
|
|
gather_data(last_time, gameid, channelid, ad_channel)
|
|
last_time = (datetime.datetime.strptime(last_time, "%Y-%m-%d %H:%M:%S") + datetime.timedelta(minutes=TimeDelay)).strftime("%Y-%m-%d %H:%M:%S")
|
|
|
|
|
|
def main():
|
|
gameids = (1004, 1011, 2001)
|
|
for gameid in gameids:
|
|
channel = 6001
|
|
ad_channel = get_ad_chanllel(gameid)
|
|
for item in ad_channel:
|
|
run(gameid, channel, item)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|