Guest User

timetrack

a guest
Mar 12th, 2019
33
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 7.72 KB | None | 0 0
  1. #!/bin/bash
  2.  
  3. # Scripted by ARB.
  4. # Contact at www.gab.com/KiteX3.
  5.  
  6. TIMETRACKER_FILE=~/Documents/notes/timetracker.txt
  7.  
  8. PRINT_TIMETRACK_GENERAL(){
  9.     START_TIME=$1
  10.     ROWS=$2
  11.     TAGS=$(( $(tput cols) / 32 * $ROWS ))
  12.     cat $TIMETRACKER_FILE <((date +"%s.%N %F")) |
  13.         awk -v TODAY=$START_TIME '$1 > TODAY' |
  14.         sed 's:[/+]: :g' |
  15.         awk -M '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' |
  16.         sort -k2 |
  17.         awk '{for(i=2;i<=NF;i++){ if($i !~ /^@.*/ && $i != "and"){arr[$i]+=$1} }; } END {for (i in arr) {printf  "\033[1;36m%02d:%02d:%02d:%02d \033[1;33m%s\033[0m\n",int(arr[i]/86400) ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), substr(i,1,19)}}' |
  18.         sort -n -r |
  19.         head -n $TAGS |
  20.         column
  21. }
  22. PRINT_TIMETRACK_CATEGORIES(){
  23.     START_TIME=$1]
  24.     ROWS=$2
  25.     TAGS=$(( $(tput cols) / 32 * $ROWS ))
  26.     cat $TIMETRACKER_FILE <((date +"%s.%N %F")) |
  27.         awk -v TODAY=$START_TIME '$1 > TODAY' |
  28.         sed 's:[/+]: :g' |
  29.         awk -M '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' |
  30.         sort -k2 |
  31.         awk '{for(i=2;i<=NF;i++){ if($i ~ /^@.*/){arr[$i]+=$1} }; } END {for (i in arr) {printf  "\033[1;36m%02d:%02d:%02d:%02d \033[1;33m%s\033[0m\n",int(arr[i]/86400) ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), substr(i,1,19)}}' |
  32.         sort -n -r |
  33.         head -n $TAGS |
  34.         column
  35. }
  36. PRINT_TIMETRACK_RECENT(){
  37.     START_TIME=$1
  38.     cat $TIMETRACKER_FILE <((date +"%s.%N %F")) |
  39.         awk -v TODAY=$START_TIME '$1 > TODAY' |
  40.         awk -M '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' |
  41.         sort -k2 |
  42.         awk '{for(i=2;i<=NF;i++){ arr[$i]+=$1 }; } END {for (i in arr) {printf "\033[1;36m%02d:%02d:%02d \033[1;33m%s\033[0m\n" ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), i}}' |
  43.         sort -n -r
  44. }
  45. PRINT_TIMETRACK_MOBILE(){
  46.     START_TIME=$1
  47.     cat $TIMETRACKER_FILE <((date +"%s.%N %F")) |
  48.         awk -v TODAY=$START_TIME '$1 > TODAY' |
  49. #        sed 's:[/+]: :g' |
  50.         awk '{if(NR>1 && n != "End"){print (4*3600 < $1-t ? 1800 : $1 - t),n;}; t=$1; delete labels; for(i=2;i<=NF;i++){labels[$i]=1;}; first=1; for (i in labels){if(first == 1){n=i; first=0}else{n=n " " i}}; }' |
  51.         sort -k2 |
  52.         awk '{for(i=2;i<=NF;i++){ if($i !~ /^@.*/ && $i != "and"){arr[$i]+=$1} }; } END {for (i in arr) {printf  "\033[1;36m%02d:%02d:%02d:%02d \033[1;33m%s\033[0m\n",int(arr[i]/86400) ,int(arr[i]/3600)%24, int(arr[i]/60)%60, int(arr[i]%60), i}}' |
  53.         sort -n -r |
  54.         head -n 20
  55. }
  56. SORT_TIMETRACK(){
  57.     LEN_TIMETRACKER=$(wc -l $TIMETRACKER_FILE)
  58.     TIMETRACKER_BACKUP=$(mktemp)
  59.     echo $TIMETRACKER_BACKUP
  60.     cat $TIMETRACKER_FILE > $TIMETRACKER_BACKUP
  61.     cat $TIMETRACKER_BACKUP | sort -n > $TIMETRACKER_FILE
  62.     diff -c $TIMETRACKER_BACKUP $TIMETRACKER_FILE
  63. }
  64.  
  65. WRITE_TIMETRACK(){
  66.     [ $# -lt 2 ] && { echo "WRITE_TIMETRACK called with no time!" ; return ;}
  67.     echo $@ >> $TIMETRACKER_FILE
  68. }
  69. usage(){
  70.     echo "timetrack"
  71.     echo "Put some info here plox"
  72. }
  73.  
  74. ALLTIME=0
  75. YEARLY=1
  76. MONTHLY=1
  77. WEEKLY=1
  78. MOBILE=0
  79. TIME_TO_ENTER=$(date +%s.%N)
  80. LAST_DATE=$( tail -n 1 $TIMETRACKER_FILE | awk '{print $1}')
  81.  
  82. while true ; do
  83.     case "$1" in
  84.         -A )
  85.             ALLTIME=1
  86.             YEARLY=1
  87.             MONTHLY=1
  88.             WEEKLY=1
  89.             MOBILE=0
  90.             shift
  91.         ;;
  92.         -Y )
  93.             ALLTIME=0
  94.             YEARLY=1
  95.             MONTHLY=1
  96.             WEEKLY=1
  97.             MOBILE=0
  98.             shift
  99.         ;;
  100.         -M )
  101.             ALLTIME=0
  102.             YEARLY=0
  103.             MONTHLY=1
  104.             WEEKLY=1
  105.             MOBILE=0
  106.             shift
  107.         ;;
  108.         -W )
  109.             ALLTIME=0
  110.             YEARLY=0
  111.             MONTHLY=0
  112.             WEEKLY=1
  113.             MOBILE=0
  114.             shift
  115.         ;;
  116.         -m )
  117.             ALLTIME=0
  118.             YEARLY=0
  119.             MONTHLY=0
  120.             WEEKLY=0
  121.             MOBILE=1
  122.             TIME_TO_ENTER=$(date +%s.000000000)
  123.             shift
  124.         ;;
  125.         -d )
  126.             [ $MOBILE -eq 0 ] && { TIME_TO_ENTER=$(date -d "$2" +%s.%N) ;}
  127.             [ $MOBILE -eq 1 ] && { TIME_TO_ENTER=$(date +%s.000000000) ;}
  128.             shift 2
  129.         ;;
  130.         -S )
  131.             echo "Sorting $TIMETRACKER_FILE ..."
  132.             SORT_TIMETRACK
  133.             exit 0
  134.         ;;
  135.         -h )
  136.             usage
  137.             exit 1
  138.         ;;
  139.         -* )
  140.             echo "Unrecognized tag. Printing usage and exiting."
  141.             usage
  142.             exit 1
  143.         ;;
  144.         *)
  145.             break
  146.         ;;
  147.     esac
  148. done;
  149.  
  150. # Check for errors in TIME_TO_ENTER
  151. echo $TIME_TO_ENTER | grep -e '[0-9]\{9,11\}\.[0-9]\{9\}' > /dev/null || {
  152.     echo -e "Invalid TIME_TO_ENTER:\n( $TIME_TO_ENTER ).\nCheck validity of '-d' flag." ;
  153.     exit 2 ;
  154. }
  155.  
  156. [ $(echo "$TIME_TO_ENTER > $LAST_DATE" | bc -l) -eq 0 ] && {
  157.     echo -e "TIME_TO_ENTER ( $TIME_TO_ENTER ) precedes last timetracker entry.";
  158.     date -d "@$(echo $TIME_TO_ENTER | grep -o '^[0-9]*')";
  159.     echo -e "Are you sure you wish to enter?\n[y/N]";
  160.     read choice;
  161.     case $choice in
  162.         y*)
  163.             echo -e "Forcing entry into timetracker.\nSorting records afterwards with 'timetrack -S' is recommended."
  164.         ;;
  165.         *)
  166.             exit 3;
  167.         ;;
  168.     esac
  169. }
  170.  
  171. if [ $# -gt 0 ]
  172.     then
  173.     #echo "$(date +%s.%N) $@" >> $TIMETRACKER_FILE
  174.     [ $MOBILE -eq 0 ] && { WRITE_TIMETRACK $TIME_TO_ENTER "$@" ;}
  175.     [ $MOBILE -eq 1 ] && { WRITE_TIMETRACK $TIME_TO_ENTER "$@" ;}
  176. fi
  177.  
  178. cat $TIMETRACKER_FILE | tail -n 5
  179. echo -e ''
  180. # ALLTIME ACTIVITY TRACKER
  181. if [ $ALLTIME -eq 1 ]
  182. then
  183.     # KEYWORD TRACKER
  184.     echo -e "\033[1;34m---ALLTIME ACTIVITY BY KEYWORD---\033[0m"
  185.     PRINT_TIMETRACK_GENERAL 0 3
  186.     # CATEGORICAL TRACKER
  187.     echo -e "\033[1;34m---ALLTIME ACTIVITY BY CATEGORY---"
  188.     PRINT_TIMETRACK_CATEGORIES 0 2
  189. fi
  190.  
  191. # YEAR ACTIVITY TRACKER
  192. if [ $YEARLY -eq 1 ]
  193. then
  194. echo -e "\033[1;34m---"$(date +%Y | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY KEYWORD---"
  195. PRINT_TIMETRACK_GENERAL $(date -d "Jan 1" +%s.%N) 6
  196. echo -e "\033[1;34m---"$(date +%Y | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY CATEGORY---"
  197. PRINT_TIMETRACK_CATEGORIES $(date -d "Jan 1" +%s.%N) 2
  198. fi
  199.  
  200. # MONTHLY
  201. if [ $MONTHLY -eq 1 ]
  202. then
  203. echo -e "\033[1;34m---"$(date +%B | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY KEYWORD---"
  204. PRINT_TIMETRACK_GENERAL $(date -d "12am $(date +%b) 1" +%s.%N) 6
  205. echo -e "\033[1;34m---"$(date +%B | tr '[:lower:]' '[:upper:]' )" ACTIVITY BY CATEGORY---"
  206. PRINT_TIMETRACK_CATEGORIES $(date -d "12am $(date +%b) 1" +%s.%N) 2
  207. fi
  208.  
  209. # WEEKLY
  210. if [ $WEEKLY -eq 1 ]
  211. then
  212. echo -e "\033[1;34m---"$(echo $(date -d "last sunday" +"%b %d") " TO " $(date -d "sunday" +"%b %d") | tr '[:lower:]' '[:upper:]' )" WEEKLY ACTIVITY BY KEYWORD---"
  213. PRINT_TIMETRACK_GENERAL $(date -d "last sunday 11:59pm" +"%s.%N") 6
  214. echo -e "\033[1;34m---"$(echo $(date -d "last sunday" +"%b %d") " TO " $(date -d "sunday" +"%b %d") | tr '[:lower:]' '[:upper:]' )" WEEKLY ACTIVITY BY CATEGORY---"
  215. PRINT_TIMETRACK_CATEGORIES $(date -d "last sunday 11:59pm" +"%s.%N") 2
  216. fi
  217.  
  218. # TODAY
  219. if [ $MOBILE -eq 0 ]
  220. then
  221. echo -e "\033[1;34m---TODAY'S ACTIVITY---"
  222. PRINT_TIMETRACK_RECENT $(date -d "12am" +%s.%N)
  223. fi
  224. if [ $MOBILE -eq 1 ]
  225. then
  226. echo -e "\033[1;34m---TODAY'S ACTIVITY---"
  227. PRINT_TIMETRACK_MOBILE $(date -d "00:00" +%s.%N)
  228. fi
Advertisement
Add Comment
Please, Sign In to add comment