Skip to content

Instantly share code, notes, and snippets.

@dosaboy
Last active September 5, 2018 13:17
Show Gist options
  • Select an option

  • Save dosaboy/bbd9db9794b9b57998581ea351f28598 to your computer and use it in GitHub Desktop.

Select an option

Save dosaboy/bbd9db9794b9b57998581ea351f28598 to your computer and use it in GitHub Desktop.
#!/bin/bash -eu
#
# Authors:
# - [email protected]
# - [email protected]
#
# Description:
# Look for most recent capabilites updates from each backend in cinder
# scheduler logs and display their capacity counts.
#
# Requires:
# - jq
#
keys=(
"Updating capabilities for"
"Received volume service update from" # >= queens
)
keyfilter=$(for k in "${keys[@]}"; do echo -n "$k|"; done| sed -r 's/\|$//g')
backends=(
)
__backends=(
)
readarray -t logs<<<"`ls -t /var/log/cinder/cinder-scheduler.log*`"
for log in ${logs[@]}; do
readarray -t _backends<<<"`egrep "$keyfilter" $log | sed -r 's/.+ ([[:alnum:]]+@[[:alnum:]\-]+)(#[[:alnum:]\-]+)?: .+/\1/g;t;d'| sort| uniq`"
__backends+=( ${_backends[@]} )
done
readarray -t backends<<<`echo ${__backends[@]}| sed -r 's/\s+/\n/g'| sort | uniq`
echo "${#backends[@]} backend(s)"
echo "${backends[@]}"
for backend in "${backends[@]}"; do
echo "==== Volume backend '$backend' ===="
for key in "${keys[@]}"; do
for log in ${logs[@]}; do
`grep -q "$key" $log` || { echo "key '$key' not found in $log"; continue; }
line="`grep "$key" $log| tail -n 1`"
echo "Key=\"$key $backend\""
echo $line| sed -r "s/.+$key ([^\s]+): (\{.+\}).+/____\2____/g;t;d"| sed -r "s/'/\"/g"| sed -r "s/____//g"| sed -r 's/u"/"/g'| sed -r 's/None/null/g' | \
sed -r -e 's/False/false/g' -e 's/True/true/g' -e 's/(datetime\.datetime\(.+\))/"\1"/g'| \
jq 'with_entries(select([.key] | inside(["provisioned_capacity_gb", "allocated_capacity_gb", "free_capacity_gb", "total_capacity_gb"])))'
break
done
done
done
echo "Done."
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment