def stat(Db, start_time, end_time, cursor=None, Host="localhost", User="******", Passwd="123456"): ## 检测每个渠道告警配置 sql = 'select config from admin_game_alarm_config where id = 1' try: print base_stat.fetchall(cursor, sql) config = base_stat.fetchall(cursor, sql)[0][0] conf = json.loads(config) except: print "no check_alarm config" return last_check_time = start_time if start_time - base_stat.today0() < 30 * 60: last_check_time = base_stat.today0() ## 针对每个配置进行处理 for alarm_type, alarm_val in conf.items(): alarm_val = int(alarm_val) if int(alarm_type) == ALARM_PLAYER_STAKE_COIN: check_player_stake_coin(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_OUTPUT_COIN: check_player_output_coin(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_OUTPUT_COIN_TODAY: check_player_output_coin_today(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_REG_SAME_IP: check_reg_same_ip(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_REG_SAME_DEVICE: check_reg_same_device(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_OUT_STAKE_COIN_RATE: check_player_out_stake_coin_rate(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_RECHARGE: check_player_recharge(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_RECHARGE_TODAY: check_player_recharge_today(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_WITHDRAW: check_player_withdraw(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_WITHDRAW_TODAY: check_player_withdraw_today(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_PRESENT: check_player_present(cursor, alarm_val, last_check_time) elif int(alarm_type) == ALARM_PLAYER_PRESENT_TODAY: check_player_present_today(cursor, alarm_val, last_check_time) else: pass print "check_alarm succ: ", start_time
def check_reg_same_device(cursor, alarm_val, last_check_time): sql = ''' select did, val from (select did, count(1) as val from player where reg_time >= %d and did not in (select distinct pid from admin_game_alarm where time >= %d and stype = %d) group by did) where val >= %d ''' % (base_stat.today0(), base_stat.today0(), ALARM_REG_SAME_DEVICE, alarm_val) for did, count in base_stat.fetchall(cursor, sql): sql = ''' insert into admin_game_alarm (id, pid, time, stype, val, state, relate_id) values (0, %d, %d, %d, '%s', %d, 0) ''' % (did, now_sec(), ALARM_REG_SAME_DEVICE, join([count, alarm_val ]), STATE_UNREAD) cursor.execute(sql)
def check_player_present_today(cursor, alarm_val, last_check_time): sql = ''' select give_id, val from (select give_id, sum(money) as val from log_bank_give where give_agent = 0 and time >= %d and give_id not in (select pid from admin_game_alarm where time >= %d and stype = %d) group by give_id) where val >= %d ''' % (base_stat.today0(), base_stat.today0(), ALARM_PLAYER_PRESENT_TODAY, alarm_val) for pid, money in base_stat.fetchall(cursor, sql): sql = ''' insert into admin_game_alarm (id, pid, time, stype, val, state, relate_id) values (0, %d, %d, %d, '%s', %d, 0) ''' % (pid, now_sec(), ALARM_PLAYER_PRESENT_TODAY, join([int(money / 100), alarm_val]), STATE_UNREAD) cursor.execute(sql)
def check_player_withdraw_today(cursor, alarm_val, last_check_time): sql = ''' select pid, val from (select pid, sum(withdraw_deposit_money) as val from admin_withdraw where application_time >= %d and pid not in (select pid from admin_game_alarm where time >= %d and stype = %d) group by pid) t where val >= %d ''' % (base_stat.today0(), base_stat.today0(), ALARM_PLAYER_WITHDRAW_TODAY, alarm_val) print sql for pid, money in base_stat.fetchall(cursor, sql): sql = ''' insert into admin_game_alarm (id, pid, time, stype, val, state, relate_id) values (0, %d, %d, %d, '%s', %d, 0) ''' % (pid, now_sec(), ALARM_PLAYER_WITHDRAW_TODAY, join([int(money / 100), alarm_val]), STATE_UNREAD) cursor.execute(sql)
def check_player_recharge_today(cursor, alarm_val, last_check_time): sql = ''' select pid, val from (select pid, sum(cost) as val from admin_recharge where time >= %d and state = %d and pid not in (select pid from admin_game_alarm where time >= %d and stype = %d) group by pid) where val >= %d ''' % (base_stat.today0(), PAY_STATE_SUCC, base_stat.today0(), ALARM_PLAYER_RECHARGE_TODAY, alarm_val) for pid, cost in base_stat.fetchall(cursor, sql): sql = ''' insert into admin_game_alarm (id, pid, time, stype, val, state, relate_id) values (0, %d, %d, %d, '%s', %d, 0) ''' % (pid, now_sec(), ALARM_PLAYER_RECHARGE_TODAY, join([int(cost / 100), alarm_val]), STATE_UNREAD) cursor.execute(sql)
def check_player_output_coin_today(cursor, alarm_val, last_check_time): sql = ''' select pid, val from (select pid, sum(output_coin - stake_coin) as val from %s where time >= %d and pid not in (select distinct pid from admin_game_alarm where time >= %d and stype == %d) group by pid) t where val >= %d ''' % (base_stat.get_table_log_player_subgame( now_sec()), base_stat.today0(), base_stat.today0(), ALARM_PLAYER_OUTPUT_COIN_TODAY, alarm_val) for pid, win_coin in base_stat.fetchall(cursor, sql): sql = ''' insert into admin_game_alarm (id, pid, time, stype, val, state, relate_id) values (0, %d, %d, %d, '%s', %d, 0) ''' % (pid, time, ALARM_PLAYER_OUTPUT_COIN_TODAY, join([win_coin, alarm_val]), STATE_UNREAD) cursor.execute(sql)
pump, game_count in base_stat.fetchall(cursor, sql): sql = ''' insert into t_player_subgame (time, pid, gameid, roomtype, game_count, stake_coin, output_coin, pump) values (%d, %d, %d, %d, %d, %d, %d, %d) ''' % (tjdate, pid, gameid, roomtype, game_count, total_stake_coin, total_output_coin, pump) cursor.execute(sql) if cursor._result.warning_count > 0: print "sql err...", sql raise "sql err" print "player_subgame_stat succ:", time.strftime( "%Y-%m-%d %H:%M:%S", time.localtime(int(time.time()))) if __name__ == "__main__": end_time = base_stat.today0() start_time = end_time - 86400 import sys db_name = "server_1" if len(sys.argv) > 1: db_name = sys.argv[1] if len(sys.argv) > 2: start_time = int(sys.argv[2]) end_time = start_time + 86400 stat(db_name, start_time, end_time)