Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
Drupal Upstream
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Analyze
Value stream analytics
Contributor analytics
Repository analytics
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
ASC IRIS Web Services
Drupal Upstream
Commits
0bc9694c
Commit
0bc9694c
authored
3 years ago
by
Brian Weaver
Browse files
Options
Downloads
Patches
Plain Diff
query_all.sh improvements
parent
bc149682
No related branches found
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
scripts/backup_fresh.sh
+69
-0
69 additions, 0 deletions
scripts/backup_fresh.sh
scripts/query_all.sh
+34
-20
34 additions, 20 deletions
scripts/query_all.sh
scripts/query_site.sh
+47
-0
47 additions, 0 deletions
scripts/query_site.sh
with
150 additions
and
20 deletions
scripts/backup_fresh.sh
0 → 100755
+
69
−
0
View file @
0bc9694c
#!/usr/bin/env bash
if
[[
-z
$1
]]
;
then
echo
;
echo
"Usage:
$0
<site.env>"
;
echo
;
echo
;
exit
1
;
fi
# MacOS compatibility....
if
[[
"
$OSTYPE
"
==
*
"darwin"
*
]]
;
then
# echo "This is MacOS. OSTYPE[$OSTYPE]";
if
[[
-z
`
which gdate
`
]]
;
then
echo
;
echo
"'gdate' command not found."
;
echo
-n
"The GNU version of the 'date' command is needed on MacOS. "
;
echo
"It is available as the 'gdate' command via the 'coreutils' Homebrew package."
;
if
[[
-z
`
which brew
`
]]
;
then
echo
;
echo
"Homebrew is NOT installed. Homebrew and the 'coreutils' package need to be installed to proceed. Stopping."
;
echo
"Visit https://brew.sh/ for more information."
;
else
echo
;
echo
"Try installing the 'coreutils' package -- brew install coreutils"
;
fi
echo
;
echo
;
exit
1
;
else
DATE_CMD
=
'gdate'
;
fi
elif
[[
"
$OSTYPE
"
==
*
"linux"
*
]]
;
then
# echo "This is Linux - OSTYPE[$OSTYPE]. Assuming 'date' command is available and GNU.";
DATE_CMD
=
'date'
;
else
echo
;
echo
"Unable to determine OS type -
\$
OSTYPE[
$OSTYPE
] contains neither 'linux' nor 'darwin'. Stopping."
;
echo
;
echo
;
exit
1
;
fi
MAX_AGE
=
3600
;
# One hour = "fresh enough"
# Returns unix timestamp with decimal
BACKUP_DATE_UNIX
=
`
terminus backup:info
--field
=
date
--format
=
string
$1
`
;
if
[[
-z
$BACKUP_DATE_UNIX
]]
;
then
BACKUP_DATE_UNIX
=
0
;
# lol never!
fi
BACKUP_DATE_UNIX
=
${
BACKUP_DATE_UNIX
%.*
}
;
# Strip decimal
BACKUP_DATE_FRIENDLY
=
$(
$DATE_CMD
-d
@
$BACKUP_DATE_UNIX
)
;
# echo "Backup date: $BACKUP_DATE_FRIENDLY";
NOW
=
`
$DATE_CMD
+%s
-u
`
;
BACKUP_AGE
=
`
expr
$NOW
-
$BACKUP_DATE_UNIX
`
;
if
[[
$BACKUP_AGE
-gt
$MAX_AGE
]]
;
then
>
&2
echo
"Backup is stale -
$BACKUP_DATE_FRIENDLY
-
$BACKUP_AGE
seconds ago."
;
# By convention, a non-zero exit code indicates an error condition.
# We will return the backup age in seconds, since it is stale.
exit
$BACKUP_AGE
;
else
# echo "Backup is fresh enough - $BACKUP_DATE_FRIENDLY - $BACKUP_AGE seconds ago.";
# By convention, exit code 0 means "success", so we will return 0
# to indicate success -- the backup is fresh
exit
0
;
fi
This diff is collapsed.
Click to expand it.
scripts/query_all.sh
+
34
−
20
View file @
0bc9694c
#!/usr/bin/env bash
# Example usage:
# 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
...
...
@@ -12,24 +12,25 @@
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
"
SQL file:
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
;
>
&2
echo
;
>
&2
echo
"No environment specified, assuming dev.."
;
>
&2
echo
;
ENV
=
'dev'
;
else
ENV
=
$2
;
fi
# 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'
;
# 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."
;
...
...
@@ -38,34 +39,47 @@
fi
# Check if GNU parallel
USE_PARALLEL
=
0
;
PARALLEL_PATH
=
$(
which parallel
)
;
# 'parallel' command exists
# >&2 echo "'parallel' path: $PARALLEL_PATH" > /dev/stderr;
if
[[
!
-z
$PARALLEL_PATH
]]
;
then
PARALLEL_VERSION
=
$(
$PARALLEL_PATH
--version
|
head
-1
)
;
# get first line of version
# >&2 echo "'parallel' version: $PARALLEL_VERSION" > /dev/stderr;
if
[[
$PARALLEL_VERSION
==
*
"GNU parallel"
*
]]
;
then
# >&2 echo "GNU parallel found: $PARALLEL_PATH" > /dev/stderr;
USE_PARALLEL
=
1
;
# it really is GNU parallel. we like it.
fi
fi
# ALL sites
echo
"Get sites..."
;
>
&2
echo
-n
"Getting site list... "
;
SITES
=
$(
terminus site:list
--upstream
=
$UPSTREAM
--fields
=
name
--format
=
string |
sort
)
;
echo
$SITES
;
# SITES="comm-d8 comparativestudies-d8 complexity-d8 cstw-d8";
>
&2
echo
$SITES
;
>
&2
echo
;
# Non-sandbox sites only
# SITES=$(terminus site:list --upstream=$UPSTREAM --fields=name --format=string --filter=plan_name!=Sandbox | sort);
# Check for GNU parallel
USE_PARALLEL
=
false
;
PARALLEL_PATH
=
$(
which parallel
)
;
# 'parallel' command exists
echo
"'parallel' path:
$PARALLEL_PATH
"
;
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
# Determine whether to generate backups
QUERY_ALL_GENERATE_BACKUPS
=
0
;
if
[[
-z
$QUERY_ALL_SKIP_BACKUPS
&&
"
$ENV
"
==
"live"
]]
;
then
QUERY_ALL_GENERATE_BACKUPS
=
1
;
fi
export
QUERY_ALL_GENERATE_BACKUPS
=
1
;
if
[[
"
$USE_PARALLEL
"
==
true
]]
;
then
# Run it
echo
>
/dev/stderr
;
if
[[
$USE_PARALLEL
-gt
0
]]
;
then
# With parallel
parallel
--delay
0.1
--tag
"
$INNER_SCRIPT
{}.
$ENV
$1
"
:::
$SITES
parallel
--delay
0.1
--tag
-j
36
--line-buffer
"
$INNER_SCRIPT
{}.
$ENV
$1
"
:::
$SITES
else
# We're going to use the inner script even without parallel
# 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.
for
SITE_NAME
in
$SITES
;
do
...
...
This diff is collapsed.
Click to expand it.
scripts/query_site.sh
0 → 100755
+
47
−
0
View file @
0bc9694c
#!/usr/bin/env bash
if
[[
-z
$1
||
-z
$2
]]
;
then
echo
;
echo
"Usage:
$0
<site.env> <query_file>"
;
echo
;
echo
;
exit
1
;
fi
;
# Split site and environment to support conditional $ENV checking
SITE_NAME
=
${
1
%.*
}
;
# echo "SITE_NAME: $SITE_NAME";
ENV
=
${
1
##*.
}
;
# echo "ENV: $ENV";
# Wake site (only if [[ $ENV == 'live' ]] if you have no sandboxes?)
terminus
env
:wake
$SITE_NAME
.
$ENV
;
# BACKUP FRESHNESS SCRIPT: https://gist.github.com/weaver299/46257300e53fe50b2a0b929ab721860e
# # Check if backup is "fresh" "enough"... (only if [[ $ENV == 'live' ]] maybe?)
if
[[
$QUERY_ALL_GENERATE_BACKUPS
-gt
0
]]
;
then
>
&2
echo
"Check backup freshness.."
./backup_fresh.sh
$SITE_NAME
.
$ENV
;
BACKUP_FRESH
=
$?
;
# capture exit code
if
[[
$BACKUP_FRESH
-gt
0
]]
;
then
# 0 means "fresh enough", else the script returns the age in seconds
>
&2
echo
"Creating a fresh backup ..."
;
# echo "terminus backup:create $SITE_NAME.$ENV --keep-for=30 --element=db";
terminus backup:create
$SITE_NAME
.
$ENV
--keep-for
=
30
--element
=
db
;
fi
fi
# Get 'mysql' command from terminus
MYSQL_CMD
=
$(
terminus connection:info
--fields
=
mysql_command
--format
=
string
$SITE_NAME
.
$ENV
)
;
# Pipe our query file into it
QUERY_CMD
=
"cat
$2
|
$MYSQL_CMD
"
;
# Suppress password on command line warning
QUERY_CMD
=
"
$QUERY_CMD
2>&1 | grep -vi 'using a password on the command line'"
;
# Remove field headers from query output
QUERY_CMD
=
"
$QUERY_CMD
| tail +2"
;
# Run it
eval
$QUERY_CMD
;
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment