#!/bin/bash
#
# mysql_instance
#
# MySQL Instance
#
# usage: mysql_instance [-d storepath] [-S|-u ulsserver] <conf> [<date time>]
#
########################################################################
#
WDIR="`dirname $0`"
#
unset D S U
#
while getopts d:Su:? op
 do
  case "$op" in
    d) D="-d $OPTARG";;
    S) S="-S";;
    u) U="-u $OPTARG";;
    *) echo "usage: $0 [-d storepath] [-S|-u ulsserver] <conf> [<date time>]"
       exit 1;;
  esac
done
shift $(( $OPTIND - 1 ))
#
if [[ $# -lt 1 || ! -s "$1" ]]
 then
  echo "usage: $0 [-d storepath] [-S|-u ulsserver] <conf> [<date time>]"
  exit 1
fi
#
unset ULSNAME ULSSECTION MYSQL_HOST MYSQL_PORT MYSQL_SOCKET MYSQL_STATUS_CONF MYSQL_VARIABLES_CONF MYSQL_USER MYSQL_PASSWORD
#
conf="$1"
#
if [[ $# -gt 2 ]]
 then
  DT="$2"
else
  DT="`date '+%Y-%m-%d %T'`"
fi
#
MIN=`date --date="$DT" '+%M' | sed 's/^0//'`
STD=`date --date="$DT" '+%H' | sed 's/^0//'`
#
. $conf
#
if [[ -n "$MYSQL_CNF" ]]
 then
  if [[ -z "$MYSQL_SOCKET" ]]
   then
    MYSQL_SOCKET=$(awk -F '[ \t]*=[ \t]*' '/[[].*[]]/ {m = $1};m == "[mysqld]" && $1 == "socket" {if( !s )s = $2};END {if( s )print s;else print "/var/lib/mysql/mysql.sock"}' "$MYSQL_CNF")
  fi
fi
#
if [[ $PATH != */usr/bin* ]]
 then
  PATH=/usr/bin:$PATH
fi
#
export ULSNAME ULSSECTION MYSQL_HOST MYSQL_PORT MYSQL_SOCKET MYSQL_STATUS_CONF MYSQL_VARIABLES_CONF MYSQL_USER MYSQL_PASSWORD PATH MYSQL_CNF
#
egrep '^[[:blank:]]*[0-9*/]+[[:blank:]]+[0-9*/]+[[:blank:]]+[a-zA-Z]' $MYSQL_TESTS_CONF | while read minutes hours cmd cmdpars
 do
  if echo "$hours" | awk -v TEST="$STD" -F ',' '
{ for( i=1; i<=NF; i++)
  { if( 1 < split($i, a, "/") )
    { p = a[1]
      if( a[2] > 1 )
        s = a[2]
      else
        s = 24
      t = 1
    }
    else
    { p = $i
      s = 1
      t = 0
    }
    if( 1 < split(p ,b ,"-") )
    { v = b[1]
      w = b[2]
    }
    else if( p == "*" )
    { v = 0
      w = 23
    }
    else
    { v = p
      if( t )
        w = 23
      else
        w = p
    }
    for( j = v; j <= w; j += s )
    { if( TEST == j )
        r = 1
    }
  }
}
END { if( r != 1 )
        exit(1)
    }'
   then
    if echo "$minutes" | awk -v TEST="$MIN" -F ',' '
{ for( i=1; i<=NF; i++)
  { if( 1 < split($i, a, "/") )
    { p = a[1]
      if( a[2] > 1 )
        s = a[2]
      else
        s = 60
      t = 1
    }
    else
    { p = $i
      s = 1
      t = 0
    }
    if( 1 < split(p ,b ,"-") )
    { v = b[1]
      w = b[2]
    }
    else if( p == "*" )
    { v = 0
      w = 59
    }
    else
    { v = p
      if( t )
        w = 59
      else
        w = p
    }
    for( j = v; j <= w; j += s )
    { if( TEST == j )
        r = 1
    }
  }
}
END { if( r != 1 )
        exit(1)
    }'
     then
      if [[ $cmd = /* ]]
       then
        bash $cmd $D $S $U "$DT" $cmdpars &
      else
        bash $WDIR/$cmd $D $S $U "$DT" $cmdpars &
      fi
    fi
  fi
done
