scripts

Utilitity scripts
git clone git://gtms.dev:scripts
Log | Files | Refs

md (2660B)


      1 #!/usr/bin/env zsh
      2 
      3 MDCFG="$XDG_CONFIG_HOME/mdcfg"
      4 
      5 [ -f $MDCFG ] || exit 1
      6 
      7 local p_start=0
      8 local p_restart=0
      9 local p_attach=''
     10 local p_stop=0
     11 local p_info=0
     12 local p_debug=0
     13 
     14 local opt
     15 while getopts da:srthi opt; do
     16   case $opt in
     17   d)
     18     p_debug=1
     19     ;;
     20   a)
     21     p_attach=$OPTARG
     22     ;;
     23   s)
     24     p_start=1
     25     ;;
     26   t)
     27     p_stop=1
     28     ;;
     29   r)
     30     p_restart=1
     31     ;;
     32   i)
     33     p_info=1
     34     ;;
     35   h)
     36     cat <<EOF
     37 Dtach shortucts
     38 
     39 USAGE:
     40   md [FLAGS] [<app>...]
     41 
     42 FLAGS:
     43   -d        Print debug messages
     44   -a  <app> Attach
     45   -s        Start
     46   -r        Restart
     47   -i  <app> Print info about app w/o proceeding
     48   -h        Print usage w/o proceeding
     49 EOF
     50     exit 0
     51     ;;
     52   esac
     53 done
     54 ((OPTIND > 1)) && shift $((OPTIND - 1))
     55 typeset -a apps
     56 apps=($*)
     57 
     58 E() {
     59   print $@ >&2
     60   exit 1
     61 }
     62 
     63 D() {
     64   [[ $p_debug -eq 1 ]] && print $@
     65 }
     66 
     67 D Actions\\n debug: $p_debug\\n info: $p_info\\n start: $p_start\\n stop: $p_stop\\n restart: $p_restart\\n attach: $p_attach
     68 
     69 # LOAD CONFIG
     70 . $MDCFG
     71 
     72 info() {
     73   local app="$1"
     74   local cwd="$2"
     75   local cmd="$3"
     76   cat <<EOF
     77 $app
     78   CWD: $cwd 
     79   CMD: $cmd
     80 EOF
     81 }
     82 
     83 [[ $p_info -eq 1 && $#apps -eq 0 ]] && apps=(${(k)serves})
     84 typeset -a valid
     85 for app in ${apps[@]}; do
     86   local cwd="${cwds[$app]}"
     87   local serve_cmd="${serves[$app]}"
     88   [[ -z $cwd || -z $serve_cmd ]] && E "$app not found."
     89   [[ $p_info -eq 1 ]] && info "$app" "$cwd" "$serve_cmd"
     90   valid=($app $valid)
     91 done
     92 [[ $p_info -eq 1 ]] && exit 0
     93 D Valid apps: $valid
     94 
     95 spath() {
     96   name="$1"
     97   echo "/tmp/dpgw_$name"
     98 }
     99 
    100 start() {
    101   local app="$1"
    102   local cmd="$2"
    103   local cwd="$3"
    104   session=$(spath $app)
    105   (cd $cwd && dtach -n $session zsh -c "$cmd")
    106 }
    107 
    108 stop() {
    109   local app="$1"
    110   local session=$(spath $app)
    111   if [[ -e $session ]]; then
    112     echo -ne '\x03' | dtach -p $session
    113   else
    114     E $session not exist.
    115   fi
    116 }
    117 
    118 restart() {
    119   local app="$1"
    120   local cmd="$2"
    121   local cwd="$3"
    122   local session=$(spath $app)
    123   stop $app
    124   while test -e $session; do sleep 0.1; done
    125   start $app "$cmd" "$cwd"
    126 }
    127 
    128 attach() {
    129   local app="$1"
    130   local session=$(spath $app)
    131   if [[ -e $session ]]; then
    132     dtach -a $session -r winch
    133   else
    134     E $session not exist.
    135   fi
    136 }
    137 
    138 # TODO(tms) 23.11.21: List
    139 # TODO(tms) 23.11.21: Possibility to stop all dpgw_* sessions
    140 
    141 if [[ $p_stop -eq 1 ]]; then
    142   for app in ${valid[@]}; do
    143     D Stopping $app
    144     stop $app
    145   done
    146 fi
    147 
    148 if [[ $p_start -eq 1 ]]; then
    149   for app in ${valid[@]}; do
    150     D Starting $app
    151     start $app "${serves[$app]}" "${cwds[$app]}"
    152   done
    153 fi
    154 
    155 if [[ $p_restart -eq 1 ]]; then
    156   for app in ${valid[@]}; do
    157     D Restarting $app
    158     restart $app "${serves[$app]}" "${cwds[$app]}"
    159   done
    160 fi
    161 
    162 if [[ -n $p_attach ]]; then
    163   attach $p_attach
    164 fi