From 24b74707301a05d41c0f66e36b2458c253ef106e Mon Sep 17 00:00:00 2001 From: Brian Weaver <weaver.299@osu.edu> Date: Thu, 17 Jun 2021 15:36:35 -0400 Subject: [PATCH] Add query_all.sh --- scripts/query_all.sh | 126 ++++++++++++++++++++----------------------- 1 file changed, 57 insertions(+), 69 deletions(-) mode change 100644 => 100755 scripts/query_all.sh diff --git a/scripts/query_all.sh b/scripts/query_all.sh old mode 100644 new mode 100755 index 79436bfd20..a6c6baadc9 --- a/scripts/query_all.sh +++ b/scripts/query_all.sh @@ -1,89 +1,77 @@ #!/usr/bin/env bash -# if [[ -z `which parallel` || -z `which tmux` || -z `which gdate` ]]; then -# echo "Either 'parallel' or 'tmux' is not installed..."; -# if [[ -z `which brew` ]]; then -# echo "Homebrew is NOT installed. Homebrew needs to be installed to proceed."; -# echo "Visit https://https://brew.sh/ for more information."; -# exit 1; -# else -# echo "Attempting to install parallel, tmux, coreutils..."; -# brew install parallel tmux coreutils; -# fi -# fi +# Example usage: +# echo "select distinct type, count(*) from node group by 1 order by 2 desc;" > node_counts.sql +# ./query_all.sh node_counts.sql live | tee node_counts.txt +UPSTREAM='b9baf7af-eb2c-4db5-81e6-32d3d9042572'; + +# Check command line arguments if [[ -z $1 ]]; then - echo; echo "Usage: $0 \"query\""; + echo; echo "Usage: $0 <query_file> [environment]"; + echo; echo; + exit 1; +elif [[ ! -f $1 || ! -r $1 ]]; then + echo; echo "The filename '$1' doesn't exist, isn't readable, or isn't an ordinary file."; echo; echo; exit 1; fi +# Default to 'dev' environment if none was specified +if [[ -z $2 ]]; then + echo; echo "No environment specified, assuming dev.."; echo; + ENV='dev'; +else + ENV=$2; +fi -mysql-pantheon () -{ - if [[ -z $1 ]]; then - echo "Usage: mysql-pantheon <site.env>"; - echo; - return; - fi; - terminus env:wake $1; - `terminus connection:info --fields=mysql_command --format=string $1;` -} - -# ENV=$1; -# shift; - -# if [[ $ENV == 'test' || $ENV == 'live' ]]; then -# if [[ -z $1 ]]; then -# while [[ -z $DEPLOY_MSG ]]; do -# echo; -# read -p "Enter deployment message: " DEPLOY_MSG; -# echo; -# done -# else -# DEPLOY_MSG=$@; -# fi -# fi - -# NOW=`date +%Y%m%d_%H%M`; -# LOG_DIR="deploy-$ENV-$NOW"; -# mkdir $LOG_DIR; -# echo "LOG_DIR: $LOG_DIR"; - -export -f mysql-pantheon; - -SITES=$(terminus org:site:list ohio-state-arts-and-sciences --upstream=b9baf7af-eb2c-4db5-81e6-32d3d9042572 --fields=name --format=string | sort); - -parallel --tag "echo \"$1\" | mysql-pantheon {}.live" ::: $SITES - -# for site in $SITES; do -# echo "=== $site ==="; - -# # echo "select nid, cid, name from webform_component where type = 'file' and extra like '%html%';" | `terminus connection:info --fields=mysql_command --format=string ${site}.live;` - -# echo "$1" | mysql-pantheon ${site}.live; +# We use a second "inner script" because we prefer to use GNU 'parallel' for speed if it's available, and I can't +# figure out how to run a multi-command subprocess with parallel without putting it in a second script. +INNER_SCRIPT='./query_site.sh'; -# echo;echo; -# done +# Check $INNER_SCRIPT exists and is executable +if [[ ! -f $INNER_SCRIPT || ! -x $INNER_SCRIPT ]]; then + echo; echo "'$INNER_SCRIPT' isn't an executable script. Stopping."; + echo; echo; + exit 1; +fi -# parallel --delay 0.1 --tag "terminus remote:drush {}.live pmi $1 -- --format=table --fields=status,extension --no-field-labels 2>/dev/null" ::: $SITES -# echo $SITES | parallel --delay 0.1 "terminus remote:drush {prohibition}.live pmpi piwik_reports -- --format=table --fields=status,name --no-field-labels 2>/dev/null"; +# ALL sites +echo "Get sites..."; +SITES=$(terminus site:list --upstream=$UPSTREAM --fields=name --format=string | sort); +echo $SITES; +# Non-sandbox sites only +# SITES=$(terminus site:list --upstream=$UPSTREAM --fields=name --format=string --filter=plan_name!=Sandbox | sort); -# parallel --delay 0.1 --tmuxpane --fg -a $LOG_DIR/site_list.txt "scripts/deploy-site-env.sh {}.$ENV $DEPLOY_MSG 2>&1 | tee $LOG_DIR/{}.log"; +# Check for GNU parallel +USE_PARALLEL=false; +PARALLEL_PATH=$(which parallel); # 'parallel' command exists +echo "'parallel' path: $PARALLEL_PATH"; -# echo; echo; echo "Sleeping for 11 seconds..."; echo; echo; -# sleep 11; +if [[ ! -z $PARALLEL_PATH ]]; then + PARALLEL_VERSION=$($PARALLEL_PATH --version); # get version + echo "'parallel' version: $PARALLEL_VERSION"; + if [[ $PARALLEL_VERSION == *"GNU parallel"* ]]; then + echo "GNU parallel found: $PARALLEL_PATH"; + USE_PARALLEL=true; # it really is GNU parallel. we like it. + fi +fi -# reset; -# wait; +if [[ "$USE_PARALLEL" == true ]]; then + # With parallel + parallel --delay 0.1 --tag "$INNER_SCRIPT {}.$ENV $1" ::: $SITES +else + # We're going to use the inner script even without parallel + # because DRY and I can't be bothered to update the logic in 2 places. -# cd $LOG_DIR; -# wc -l * | sort -n | tee line-counts.txt; -# cd ..; + for SITE_NAME in $SITES; do + echo "=== $SITE_NAME ==="; + $INNER_SCRIPT $SITE_NAME.$ENV $1; + echo;echo; + done +fi -# echo; echo; echo "Sleeping for 11 more seconds..."; echo; echo; -# sleep 11; -- GitLab