statistics_handle.sh 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. #!/usr/bin/env bash
  2. # 如果不是在 bash 下执行,则尝试用 bash 重新执行,避免用 sh 导致语法错误
  3. if [ -z "$BASH_VERSION" ]; then
  4. if command -v bash >/dev/null 2>&1; then
  5. exec bash "$0" "$@"
  6. else
  7. echo "This script requires bash. Please run with bash." >&2
  8. exit 1
  9. fi
  10. fi
  11. # 获取输入参数的时间,默认值为昨天的日期
  12. if [ -n "$1" ]; then
  13. data_time=$1
  14. else
  15. yesterday=$(date +%s)
  16. yesterday=$((yesterday - 86400))
  17. data_time=$(date -d "@$yesterday" +"%Y-%m-%d")
  18. fi
  19. # 可选:第二个参数为每批大小,第三个参数为批次间隔(秒)
  20. BATCH_SIZE=${2:-10}
  21. BATCH_INTERVAL=${3:-300}
  22. # 日志文件路径(可通过第4个参数覆盖),保持默认兼容性
  23. # LOG_FILE=${4:-./statistics_handle.log}
  24. LOG_FILE=${4:-/app/logs/statistics_handle_v2.log}
  25. # 确保日志目录存在(先创建目录,避免后面写日志失败)
  26. mkdir -p "$(dirname "$LOG_FILE")"
  27. # 写入日期到日志(使用 printf 更可靠)
  28. printf "\n# DATE: %s - STARTED AT: %s\n" "$data_time" "$(date '+%Y-%m-%d %H:%M:%S')" >> "$LOG_FILE"
  29. # 主机地址
  30. # host_url="http://admin.newsdk.com"
  31. # host_url="http://devadmin.qmgames.cn" # 测试
  32. host_url="http://admin.qmgames.cn" # 正式
  33. # 定义 URL 列表(每行一个 URL)
  34. url_list="
  35. $host_url/retaine_platform/reg_num?day=$data_time
  36. $host_url/retaine_platform/role_num?day=$data_time
  37. $host_url/retaine_platform/act_num?day=$data_time
  38. $host_url/retaine_platform/recharge_num?day=$data_time
  39. $host_url/retaine_platform/reg_total?day=$data_time
  40. $host_url/retaine_game/reg_num?day=$data_time
  41. $host_url/retaine_game/role_num?day=$data_time
  42. $host_url/retaine_game/act_num?day=$data_time
  43. $host_url/retaine_game/recharge_num?day=$data_time
  44. $host_url/retaine_game/one_stay?day=$data_time
  45. $host_url/retaine_game/three_stay?day=$data_time
  46. $host_url/retaine_game/four_stay?day=$data_time
  47. $host_url/retaine_game/five_stay?day=$data_time
  48. $host_url/retaine_game/six_stay?day=$data_time
  49. $host_url/retaine_game/seven_stay?day=$data_time
  50. $host_url/retaine_game/fifteen_stay?day=$data_time
  51. $host_url/retaine_game/thirty_stay?day=$data_time
  52. $host_url/retaine_game/reg_total?day=$data_time
  53. $host_url/retaine_server/reg_num?day=$data_time
  54. $host_url/retaine_server/role_num?day=$data_time
  55. $host_url/retaine_server/act_num?day=$data_time
  56. $host_url/retaine_server/recharge_num?day=$data_time
  57. $host_url/retaine_server/one_stay?day=$data_time
  58. $host_url/retaine_server/three_stay?day=$data_time
  59. $host_url/retaine_server/four_stay?day=$data_time
  60. $host_url/retaine_server/five_stay?day=$data_time
  61. $host_url/retaine_server/six_stay?day=$data_time
  62. $host_url/retaine_server/seven_stay?day=$data_time
  63. $host_url/retaine_server/fifteen_stay?day=$data_time
  64. $host_url/retaine_server/thirty_stay?day=$data_time
  65. $host_url/retaine_server/reg_total?day=$data_time
  66. $host_url/retaine_game_channel/reg_num?day=$data_time
  67. $host_url/retaine_game_channel/role_num?day=$data_time
  68. $host_url/retaine_game_channel/act_num?day=$data_time
  69. $host_url/retaine_game_channel/recharge_num?day=$data_time
  70. $host_url/retaine_game_channel/one_stay?day=$data_time
  71. $host_url/retaine_game_channel/three_stay?day=$data_time
  72. $host_url/retaine_game_channel/four_stay?day=$data_time
  73. $host_url/retaine_game_channel/five_stay?day=$data_time
  74. $host_url/retaine_game_channel/six_stay?day=$data_time
  75. $host_url/retaine_game_channel/seven_stay?day=$data_time
  76. $host_url/retaine_game_channel/fifteen_stay?day=$data_time
  77. $host_url/retaine_game_channel/thirty_stay?day=$data_time
  78. $host_url/retaine_game_channel/reg_total?day=$data_time
  79. $host_url/retaine_game_channel/new_act_num?day=$data_time
  80. $host_url/retaine_game_channel/new_recharge_num?day=$data_time
  81. $host_url/retaine_server_channel/reg_num?day=$data_time
  82. $host_url/retaine_server_channel/role_num?day=$data_time
  83. $host_url/retaine_server_channel/act_num?day=$data_time
  84. $host_url/retaine_server_channel/recharge_num?day=$data_time
  85. $host_url/retaine_server_channel/one_stay?day=$data_time
  86. $host_url/retaine_server_channel/three_stay?day=$data_time
  87. $host_url/retaine_server_channel/four_stay?day=$data_time
  88. $host_url/retaine_server_channel/five_stay?day=$data_time
  89. $host_url/retaine_server_channel/six_stay?day=$data_time
  90. $host_url/retaine_server_channel/seven_stay?day=$data_time
  91. $host_url/retaine_server_channel/fifteen_stay?day=$data_time
  92. $host_url/retaine_server_channel/thirty_stay?day=$data_time
  93. $host_url/retaine_server_channel/reg_total?day=$data_time
  94. "
  95. # 定义模拟 GET 请求的方法
  96. simulate_get_request() {
  97. url=$1
  98. start_time=$(date +%s)
  99. response=$(curl -s -G --connect-timeout 10 --max-time 600 "$url")
  100. ret=$?
  101. end_time=$(date +%s)
  102. duration=$((end_time - start_time))
  103. res="ok"
  104. if [ $ret -ne 0 ] || [ "$response" != "ok" ]; then
  105. res="error"
  106. fi
  107. echo "## URL: $url - RES: $res - TIME: ${duration}s" >> "$LOG_FILE"
  108. }
  109. # 循环发送请求,按批次执行,每批执行后休眠 BATCH_INTERVAL 秒
  110. count=0
  111. total=0
  112. # 使用 while read 更可靠地按行读取多行字符串(保留空行跳过)
  113. while IFS= read -r url; do
  114. # 跳过空行
  115. if [ -z "$url" ]; then
  116. continue
  117. fi
  118. simulate_get_request "$url"
  119. count=$((count + 1))
  120. total=$((total + 1))
  121. if [ $count -ge $BATCH_SIZE ]; then
  122. echo "### BATCH FINISHED at $(date '+%Y-%m-%d %H:%M:%S'), processed $total urls. Sleeping ${BATCH_INTERVAL}s" >> "$LOG_FILE"
  123. count=0
  124. sleep "$BATCH_INTERVAL"
  125. fi
  126. done <<EOF
  127. ${url_list}
  128. EOF
  129. # 如果最后一批未满,也记录并不需要再睡眠
  130. if [ $count -gt 0 ]; then
  131. echo "### FINAL BATCH FINISHED at $(date '+%Y-%m-%d %H:%M:%S'), processed $total urls." >> "$LOG_FILE"
  132. fi
  133. # 添加结束标记
  134. echo "## FINISHED #" >> "$LOG_FILE"