datacollect/gather_new_user.py
2019-09-03 12:03:09 +08:00

111 lines
3.1 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 = 5
DB = {'user': 'mytga', 'pswd': 'gzVwh4HGR68G', 'host': '10.10.3.5', 'db': 'games_report'}
mydb = MysqlBase(**DB)
def get_last_time(gameid, channelid, ad_channel):
sql = f"""SELECT
register_time
FROM
newusers_line
where
gameid={gameid}
and channelid={channelid}
and ad_channel={ad_channel}
ORDER BY
register_time DESC LIMIT 1"""
data = mydb.query(sql)
try:
last_time = data[0][0]
except Exception:
log.info("get last time form db failed!", exc_info=True)
last_time = "2019-08-30 00:00:00"
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 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 BETWEEN {begin} AND {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)
while comp_datetime(now, last_time):
print(f"lasttime={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():
gameid = 2001
channel = 6001
ad_channel = ""
run(gameid, channel, ad_channel)
if __name__ == "__main__":
main()