traffic.sh 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. #!/bin/bash
  2. _APISERVER=127.0.0.1:10085
  3. _V2CTL=/usr/bin/v2ray/v2ctl
  4. apidata () {
  5. local ARGS=
  6. if [[ $1 == "reset" ]]; then
  7. ARGS="reset: true"
  8. fi
  9. docker exec v2ray-docker $_V2CTL api --server=$_APISERVER StatsService.QueryStats "${ARGS}" \
  10. | awk '{
  11. if (match($1, /name:/)) {
  12. f=1; gsub(/^"|link"$/, "", $2);
  13. split($2, p, ">>>");
  14. printf "%s:%s->%s\t", p[1],p[2],p[4];
  15. }
  16. else if (match($1, /value:/) && f){ f = 0; printf "%.0f\n", $2; }
  17. else if (match($0, /^>$/) && f) { f = 0; print 0; }
  18. }'
  19. }
  20. print_sum() {
  21. local DATA="$1"
  22. local PREFIX="$2"
  23. local SORTED=$(echo "$DATA" | grep "^${PREFIX}" | sort -r)
  24. local SUM=$(echo "$SORTED" | awk '
  25. /->up/{us+=$2}
  26. /->down/{ds+=$2}
  27. END{
  28. printf "SUM->up:\t%.0f\nSUM->down:\t%.0f\nSUM->TOTAL:\t%.0f\n", us, ds, us+ds;
  29. }')
  30. echo -e "${SORTED}\n${SUM}" \
  31. | numfmt --field=2 --suffix=B --to=iec \
  32. | column -t
  33. }
  34. DATA=$(apidata $1)
  35. echo "------------Inbound----------"
  36. print_sum "$DATA" "inbound"
  37. echo "-----------------------------"
  38. echo
  39. echo "-------------User------------"
  40. print_sum "$DATA" "user"
  41. echo "-----------------------------"