Advertisement
arkanon

DeltaT

Oct 1st, 2010
344
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.20 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # DeltaT
  4. #   - Contagem de tempo entre processos
  5. #   - Precisão de segundos
  6. #   - Pode ser usado para contagem "aninhada" de tempo
  7. #   - Aceita uma quantidade "offset" opcional de segundos
  8. #   - Devolve:
  9. #       a hora e o timestamp de início e fim da contagem
  10. #       a variação de tempo em hh:mm:ss e em segundos
  11. #
  12. #   Arkanon <arkanon@lsd.org.br>
  13. #   2010/03/18 Qui 15:54:42 BRS
  14. #
  15. # EXEMPLO
  16. #
  17. #   Um script com:
  18. #
  19. #     time_1=$(deltat start)
  20. #
  21. #     echo "sleeping 3s..."
  22. #     sleep 3
  23. #
  24. #     time_2=$(deltat start)
  25. #     read -p "prompt: " p
  26. #     echo -e "\nyou said: $p\n"
  27. #     time_2=$(deltat stop "$time_2")
  28. #     echo -e "$time_2\n"
  29. #
  30. #     time_1=$(deltat stop "$time_1")
  31. #     echo -e "$time_1"
  32. #
  33. #   Devolve:
  34. #
  35. #     sleeping 3s...
  36. #     prompt: oi
  37. #
  38. #     you said: oi
  39. #
  40. #     OFFSET    0
  41. #      START    [2010/10/01 Sex 18:00:25 BRS]   1285966825
  42. #        END    [2010/10/01 Sex 18:00:26 BRS]   1285966826
  43. #      DELTA    00:00:01    1
  44. #
  45. #     OFFSET    0
  46. #      START    [2010/10/01 Sex 18:00:22 BRS]   1285966822
  47. #        END    [2010/10/01 Sex 18:00:26 BRS]   1285966826
  48. #      DELTA    00:00:04    4
  49.  
  50.   fmt="[%Y/%m/%d %a %H:%M:%S %Z]\t%s"
  51.   now=$(date +'%m/%d/%Y %H:%M:%S')
  52.    ts=$(date -d "$now" +"%s")
  53.  
  54.   point=$1
  55.   if [ "$point" = "start" ] && ( [ $# = 1 ] || [ $# = 2 ] )
  56.   then
  57.     [ $# = 2 ] && offset=$2 || offset=0
  58.     echo -e "OFFSET $offset"
  59.     echo -e " START "$(LANG=pt_BR date -d "$now" +"$fmt")
  60.   else
  61.     offset=$(echo "$2" | grep "OFFSET" | cut -f2)
  62.        ts0=$(echo "$2" | grep "START"  | cut -f3)
  63.     if [ "$point" = "stop" ] && [ $# = 2 ] && [ "$ts" -ge "$ts0" ]
  64.     then
  65.       diffts=$[$ts-$ts0+$offset]
  66.       time_t=$diffts
  67.       time_s=$[$time_t%60]
  68.       time_t=$[$time_t/60]
  69.       time_m=$[$time_t%60]
  70.       time_h=$[$time_t/60]
  71.       [ $time_s -le 9 ] && time_s="0$time_s"
  72.       [ $time_m -le 9 ] && time_m="0$time_m"
  73.       [ $time_h -le 9 ] && time_h="0$time_h"
  74.       delta="$time_h:$time_m:$time_s"
  75.       echo "$2"
  76.       echo -e "   END   "$(LANG=pt_BR date -d "$now" +"$fmt")
  77.       echo " DELTA  $delta  $diffts"
  78.     else
  79.       echo 'Usage: var=`deltat start [ts offset]`; cmd[; cmd; ...]; var=`deltat stop "$var"`; echo $var'
  80.     fi
  81.   fi
  82.  
  83. # [EOF]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement