线上问题注意:
设计玩家一些重要数据变化的时候,如果量不大,最好在变化时,分别将动作前数量以及动作后数量全部输出打印。
早上一点半,一阵急促的电话声把我叫醒,线上情人节活动玩家数据全部清空了。情人节活动是2.14-2.16,但是活动中获得的积分仍然可以在2.17-2.19日兑换商品。原本应该是展示结束清空积分的操作被意外调用成了活动结束的接口。导致今天零点,经历过上线操作的玩家积分全部被清空。
最终确定方案,按照日志复刻玩家的积分数据。仔细查了日志,发现玩家积分变化的接口每次只输出了动作之后的积分,并没有输出动作之前的积分数。于是,复刻玩家数据成了一大问题。我们有两个地方打印了玩家总积分数量,一个是商城日志,每次进行购买操作都会打印剩余积分数,一个是增加积分的接口,操作完成打印总积分数。所以思路便是统计2.14-2.16的所有商城log和增加积分的log,按照时间排序,取最后一次数据,就是玩家最终剩余积分数量。
只能临时写一个脚本,去日志中拉去玩家数据,脚本效率不高,但是是能想到的最快的处理方法了。脚本肯定不通用,随便记录下
#!/bin/bash
#################################
#查找14-16日玩家情人节活动积分
# 结束文件是单个场景服玩家log
# 与herolog的最后操作。需要所有
# 场景服1,3列去重排序
#################################
#商城查找到17号10点之前 防止遗漏
grep -r ShopFlow /data/home/user00/herolog/scene_hero_lvl_two*.log.200217-0* | awk -F"|" '{if($16==19) print $4,$9,$18}' | sort -k1,3 -r | sort -k3 -n -u | sort -k1,3 > tmp_herolog_17.txt
grep -r ShopFlow /data/home/user00/herolog/scene_hero_lvl_two*.log.200216-* | awk -F"|" '{if($16==19) print $4,$9,$18}' | sort -k1,3 -r | sort -k3 -n -u | sort -k1,3 > tmp_herolog_16.txt
grep -r ShopFlow /data/home/user00/herolog/scene_hero_lvl_two*.log.200215-* | awk -F"|" '{if($16==19) print $4,$9,$18}' | sort -k1,3 -r | sort -k3 -n -u | sort -k1,3 > tmp_herolog_15.txt
grep -r ShopFlow /data/home/user00/herolog/scene_hero_lvl_two*.log.200214-* | awk -F"|" '{if($16==19) print $4,$9,$18}' | sort -k1,3 -r | sort -k3 -n -u | sort -k1,3 > tmp_herolog_14.txt
grep -r 情人节 /data/home/user00/log/scenesserver/scenesserver*.log.200216-* | awk -F"-" '{print $3}' | awk '{print $1,$5,$7}' | awk -F":" '{print $1":"$2":"$3, $4}' | awk '{print $1,$2,$4}' | awk -F"(" '{print $1, $2}' | awk '{print "2020-02-16",$1,$2,$4}' | sort -k1,3 -r | sort -k3 -nu | sort -k1,3 -r > tmp_log_16.txt
grep -r 情人节 /data/home/user00/log/scenesserver/scenesserver*.log.200215-* | awk -F"-" '{print $3}' | awk '{print $1,$5,$7}' | awk -F":" '{print $1":"$2":"$3, $4}' | awk '{print $1,$2,$4}' | awk -F"(" '{print $1, $2}' | awk '{print "2020-02-15",$1,$2,$4}' | sort -k1,3 -r | sort -k3 -nu | sort -k1,3 -r > tmp_log_15.txt
grep -r 情人节 /data/home/user00/log/scenesserver/scenesserver*.log.200214-* | awk -F"-" '{print $3}' | awk '{print $1,$5,$7}' | awk -F":" '{print $1":"$2":"$3, $4}' | awk '{print $1,$2,$4}' | awk -F"(" '{print $1, $2}' | awk '{print "2020-02-14",$1,$2,$4}' | sort -k1,3 -r | sort -k3 -nu | sort -k1,3 -r > tmp_log_14.txt
cat tmp_herolog_17.txt tmp_herolog_16.txt tmp_herolog_15.txt tmp_herolog_14.txt tmp_log_16.txt tmp_log_15.txt tmp_log_14.txt > tmp_find_alluser.txt
#rm -f tmp_herolog_17.txt tmp_herolog_16.txt tmp_herolog_15.txt tmp_herolog_14.txt tmp_log_16.txt tmp_log_15.txt tmp_log_14.txt