Skip to content
This repository was archived by the owner on Aug 16, 2021. It is now read-only.

Commit 246e7b6

Browse files
authored
Merge pull request #67 from startupturbo/dmius-improvmnt
Improvement nancy_run
2 parents 5fc5178 + d40d08c commit 246e7b6

File tree

1 file changed

+129
-66
lines changed

1 file changed

+129
-66
lines changed

nancy_run.sh

Lines changed: 129 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ CURRENT_TS=$(date +%Y%m%d_%H%M%S%N_%Z)
55
DOCKER_MACHINE="nancy-$CURRENT_TS"
66
DOCKER_MACHINE="${DOCKER_MACHINE//_/-}"
77
DEBUG_TIMEOUT=0
8+
OUTPUT_REDIRECT=" > /dev/null"
89
EBS_SIZE_MULTIPLIER=15
910

1011
## Get command line params
@@ -180,7 +181,10 @@ while true; do
180181
181182
" | less -RFX
182183
exit ;;
183-
-d | --debug ) DEBUG=1; shift ;;
184+
-d | --debug )
185+
DEBUG=1;
186+
OUTPUT_REDIRECT='';
187+
shift ;;
184188
--run-on )
185189
RUN_ON="$2"; shift 2 ;;
186190
--container-id )
@@ -535,10 +539,12 @@ function checkParams() {
535539

536540
checkParams;
537541

542+
START_TIME=$(date +%s);
543+
538544
# Determine dump file size
539545
if ([ "$RUN_ON" == "aws" ] && [ ! ${AWS_EC2_TYPE:0:2} == "i3" ] && \
540546
[ -z ${EBS_VOLUME_SIZE+x} ] && [ ! -z ${DB_DUMP_PATH+x} ]); then
541-
echo "Calculate EBS volume size."
547+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Calculate EBS volume size."
542548
dumpFileSize=0
543549
if [[ $DB_DUMP_PATH =~ "s3://" ]]; then
544550
dumpFileSize=$(s3cmd info $DB_DUMP_PATH | grep "File size:" )
@@ -557,9 +563,9 @@ if ([ "$RUN_ON" == "aws" ] && [ ! ${AWS_EC2_TYPE:0:2} == "i3" ] && \
557563
let ebsSize=$dumpFileSize
558564
ebsSize=$(numfmt --to-unit=G $ebsSize)
559565
EBS_VOLUME_SIZE=$ebsSize
560-
[ $DEBUG -eq 1 ] && echo "EBS volume size: $EBS_VOLUME_SIZE Gb"
566+
[ $DEBUG -eq 1 ] && echo "$(date "+%Y-%m-%d %H:%M:%S"): EBS volume size: $EBS_VOLUME_SIZE Gb"
561567
else
562-
echo "EBS volume is not require."
568+
echo "$(date "+%Y-%m-%d %H:%M:%S"): EBS volume is not require."
563569
fi
564570
fi
565571

@@ -601,15 +607,15 @@ function waitEC2Ready() {
601607
# 5) key pair name
602608
# 6) key path
603609
function createDockerMachine() {
604-
echo "Attempt to create a docker machine..."
610+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Attempt to create a docker machine..."
605611
docker-machine create --driver=amazonec2 \
606612
--amazonec2-request-spot-instance \
607613
--amazonec2-keypair-name="$5" \
608614
--amazonec2-ssh-keypath="$6" \
609-
--amazonec2-block-duration-minutes=$4 \
610615
--amazonec2-instance-type=$2 \
611616
--amazonec2-spot-price=$3 \
612617
$1 2> >(grep -v "failed waiting for successful resource state" >&2) &
618+
# --amazonec2-block-duration-minutes=$4 \
613619
}
614620

615621
function destroyDockerMachine() {
@@ -622,11 +628,17 @@ function destroyDockerMachine() {
622628
# when we have "price-too-low" attempts, such errors come in few minutes
623629
# after an attempt and are generally unexpected by user.
624630
cmdout=$(docker-machine rm --force $1 2> >(grep -v "unknown instance" >&2) )
625-
echo "Termination requested for machine '$1', current status: $cmdout"
631+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Termination requested for machine, current status: $cmdout"
626632
}
627633

628634
function cleanupAndExit {
629-
echo "Remove temp files..." # if exists
635+
if [ "$DEBUG_TIMEOUT" -gt "0" ]; then
636+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Debug timeout is $DEBUG_TIMEOUT seconds - started."
637+
echo " To connect docker machine use:"
638+
echo " docker \`docker-machine config $DOCKER_MACHINE\` exec -it pg_nancy_${CURRENT_TS} bash"
639+
sleep $DEBUG_TIMEOUT
640+
fi
641+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Remove temp files..." # if exists
630642
docker $dockerConfig exec -i ${containerHash} sh -c "sudo rm -rf $MACHINE_HOME"
631643
rm -f "$TMP_PATH/after_db_init_code_tmp.sql"
632644
rm -f "$TMP_PATH/before_db_init_code_tmp.sql"
@@ -636,16 +648,16 @@ function cleanupAndExit {
636648
rm -f "$TMP_PATH/target_config_tmp.conf"
637649
rm -f "$TMP_PATH/pg_config_tmp.conf"
638650
if [ "$RUN_ON" = "localhost" ]; then
639-
echo "Remove docker container"
651+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Remove docker container"
640652
docker container rm -f $containerHash
641653
elif [ "$RUN_ON" = "aws" ]; then
642654
destroyDockerMachine $DOCKER_MACHINE
643655
if [ ! -z ${VOLUME_ID+x} ]; then
644-
echo "Wait and delete volume $VOLUME_ID"
656+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Wait and delete volume $VOLUME_ID"
645657
sleep 60 # wait to machine removed
646658
delvolout=$(aws ec2 delete-volume --volume-id $VOLUME_ID)
647-
echo "Volume $VOLUME_ID deleted"
648-
fi
659+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Volume $VOLUME_ID deleted"
660+
fi
649661
else
650662
>&2 echo "ASSERT: must not reach this point"
651663
exit 1
@@ -675,18 +687,18 @@ elif [[ "$RUN_ON" = "aws" ]]; then
675687
maxprice=$(echo $prices | jq 'max_by(.price) | .price')
676688
maxprice="${maxprice/\"/}"
677689
maxprice="${maxprice/\"/}"
678-
echo "Max price from history: $maxprice"
690+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Max price from history: $maxprice"
679691
multiplier="1.1"
680692
price=$(echo "$maxprice * $multiplier" | bc -l)
681-
echo "Increased price: $price"
693+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Increased price: $price"
682694
EC2_PRICE=$price
683695

684696
createDockerMachine $DOCKER_MACHINE $AWS_EC2_TYPE $EC2_PRICE \
685697
60 $AWS_KEY_PAIR $AWS_KEY_PATH;
686698
status=$(waitEC2Ready "docker-machine create" "$DOCKER_MACHINE" 1)
687699
if [ "$status" == "price-too-low" ]
688700
then
689-
echo "Price $price is too low for $AWS_EC2_TYPE instance. Getting the up-to-date value from the error message..."
701+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Price $price is too low for $AWS_EC2_TYPE instance. Getting the up-to-date value from the error message..."
690702

691703
#destroyDockerMachine $DOCKER_MACHINE
692704
# "docker-machine rm" doesn't work for "price-too-low" spot requests,
@@ -710,31 +722,31 @@ elif [[ "$RUN_ON" = "aws" ]]; then
710722
DOCKER_MACHINE="nancy-$CURRENT_TS"
711723
DOCKER_MACHINE="${DOCKER_MACHINE//_/-}"
712724
#try start docker machine name with new price
713-
echo "Attempt to create a new docker machine: $DOCKER_MACHINE with price: $EC2_PRICE."
725+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Attempt to create a new docker machine: $DOCKER_MACHINE with price: $EC2_PRICE."
714726
createDockerMachine $DOCKER_MACHINE $AWS_EC2_TYPE $EC2_PRICE \
715727
60 $AWS_KEY_PAIR $AWS_KEY_PATH;
716728
waitEC2Ready "docker-machine create" "$DOCKER_MACHINE" 0;
717729
else
718-
>&2 echo "ERROR: Cannot determine actual price for the instance $AWS_EC2_TYPE."
730+
>&2 echo "$(date "+%Y-%m-%d %H:%M:%S") ERROR: Cannot determine actual price for the instance $AWS_EC2_TYPE."
719731
exit 1;
720732
fi
721733
fi
722734

723-
echo "Check a docker machine status."
735+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Check a docker machine status."
724736
res=$(docker-machine status $DOCKER_MACHINE 2>&1 &)
725737
if [ "$res" != "Running" ]
726738
then
727-
>&2 echo "Failed: Docker $DOCKER_MACHINE is NOT running."
739+
>&2 echo "$(date "+%Y-%m-%d %H:%M:%S"): Failed: Docker $DOCKER_MACHINE is NOT running."
728740
exit 1;
729741
fi
730-
echo "Docker $DOCKER_MACHINE is running."
742+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Docker $DOCKER_MACHINE is running."
731743

732744
docker-machine ssh $DOCKER_MACHINE "sudo sh -c \"mkdir /home/storage\""
733745
if [ ${AWS_EC2_TYPE:0:2} == 'i3' ]
734746
then
735-
echo "Attempt use high speed disk"
747+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Attempt use high speed disk"
736748
# Init i3 storage, just mount existing volume
737-
echo "Attach i3 nvme volume"
749+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Attach i3 nvme volume"
738750
docker-machine ssh $DOCKER_MACHINE sudo add-apt-repository -y ppa:sbates
739751
docker-machine ssh $DOCKER_MACHINE sudo apt-get update || :
740752
docker-machine ssh $DOCKER_MACHINE sudo apt-get install -y nvme-cli
@@ -750,11 +762,11 @@ elif [[ "$RUN_ON" = "aws" ]]; then
750762
docker-machine ssh $DOCKER_MACHINE sudo mkfs -t ext4 /dev/nvme0n1p1
751763
docker-machine ssh $DOCKER_MACHINE sudo mount /dev/nvme0n1p1 /home/storage
752764
else
753-
echo "Attempt use external disk"
765+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Attempt use external disk"
754766
# Create new volume and attach them for non i3 instances if needed
755767
if [ ! -z ${EBS_VOLUME_SIZE+x} ]; then
756-
echo "Create and attach EBS volume"
757-
[ $DEBUG -eq 1 ] && echo "Create volume with size: $EBS_VOLUME_SIZE Gb"
768+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Create and attach EBS volume"
769+
[ $DEBUG -eq 1 ] && echo "$(date "+%Y-%m-%d %H:%M:%S"): Create volume with size: $EBS_VOLUME_SIZE Gb"
758770
VOLUME_ID=$(aws ec2 create-volume --size $EBS_VOLUME_SIZE --region us-east-1 --availability-zone us-east-1a --volume-type gp2 | jq -r .VolumeId)
759771
INSTANCE_ID=$(docker-machine ssh $DOCKER_MACHINE curl -s http://169.254.169.254/latest/meta-data/instance-id)
760772
sleep 10 # wait to volume will ready
@@ -786,7 +798,7 @@ if [[ "$RUN_ON" = "aws" ]]; then
786798
MACHINE_HOME="$MACHINE_HOME/storage"
787799
docker_exec sh -c "chmod a+w /storage"
788800

789-
echo "Move posgresql to separated disk"
801+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Move posgresql to separated disk"
790802
docker_exec bash -c "sudo /etc/init.d/postgresql stop"
791803
sleep 2 # wait for postgres stopped
792804
docker_exec bash -c "sudo mv /var/lib/postgresql /storage/"
@@ -828,90 +840,136 @@ function copyFile() {
828840
# Dump
829841
sleep 2 # wait for postgres up&running
830842

831-
echo "Apply sql code before db init"
843+
OP_START_TIME=$(date +%s);
832844
if ([ ! -z ${BEFORE_DB_INIT_CODE+x} ] && [ "$BEFORE_DB_INIT_CODE" != "" ])
833845
then
846+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Apply sql code before db init"
834847
BEFORE_DB_INIT_CODE_FILENAME=$(basename $BEFORE_DB_INIT_CODE)
835848
copyFile $BEFORE_DB_INIT_CODE
836-
docker_exec bash -c "psql --set ON_ERROR_STOP=on -U postgres test -b -f $MACHINE_HOME/$BEFORE_DB_INIT_CODE_FILENAME"
849+
# --set ON_ERROR_STOP=on
850+
docker_exec bash -c "psql --set ON_ERROR_STOP=on -U postgres test -b -f $MACHINE_HOME/$BEFORE_DB_INIT_CODE_FILENAME $OUTPUT_REDIRECT"
851+
END_TIME=$(date +%s);
852+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
853+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Before init SQL code applied for $DURATION."
837854
fi
838-
echo "Restore database dump"
855+
OP_START_TIME=$(date +%s);
856+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Restore database dump"
839857
case "$DB_DUMP_EXT" in
840858
sql)
841-
docker_exec bash -c "cat $MACHINE_HOME/$DB_DUMP_FILENAME | psql --set ON_ERROR_STOP=on -U postgres test"
859+
docker_exec bash -c "cat $MACHINE_HOME/$DB_DUMP_FILENAME | psql --set ON_ERROR_STOP=on -U postgres test $OUTPUT_REDIRECT"
842860
;;
843861
bz2)
844-
docker_exec bash -c "bzcat $MACHINE_HOME/$DB_DUMP_FILENAME | psql --set ON_ERROR_STOP=on -U postgres test"
862+
docker_exec bash -c "bzcat $MACHINE_HOME/$DB_DUMP_FILENAME | psql --set ON_ERROR_STOP=on -U postgres test $OUTPUT_REDIRECT"
845863
;;
846864
gz)
847-
docker_exec bash -c "zcat $MACHINE_HOME/$DB_DUMP_FILENAME | psql --set ON_ERROR_STOP=on -U postgres test"
865+
docker_exec bash -c "zcat $MACHINE_HOME/$DB_DUMP_FILENAME | psql --set ON_ERROR_STOP=on -U postgres test $OUTPUT_REDIRECT"
848866
;;
849867
esac
868+
END_TIME=$(date +%s);
869+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
870+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Database dump restored for $DURATION."
850871
# After init database sql code apply
851-
echo "Apply sql code after db init"
872+
OP_START_TIME=$(date +%s);
852873
if ([ ! -z ${AFTER_DB_INIT_CODE+x} ] && [ "$AFTER_DB_INIT_CODE" != "" ])
853874
then
875+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Apply sql code after db init"
854876
AFTER_DB_INIT_CODE_FILENAME=$(basename $AFTER_DB_INIT_CODE)
855877
copyFile $AFTER_DB_INIT_CODE
856-
docker_exec bash -c "psql -U postgres test -b -f $MACHINE_HOME/$AFTER_DB_INIT_CODE_FILENAME"
878+
docker_exec bash -c "psql --set ON_ERROR_STOP=on -U postgres test -b -f $MACHINE_HOME/$AFTER_DB_INIT_CODE_FILENAME $OUTPUT_REDIRECT"
879+
END_TIME=$(date +%s);
880+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
881+
echo "$(date "+%Y-%m-%d %H:%M:%S"): After init SQL code applied for $DURATION."
857882
fi
858883
# Apply DDL code
859-
echo "Apply DDL SQL code"
884+
OP_START_TIME=$(date +%s);
860885
if ([ ! -z ${TARGET_DDL_DO+x} ] && [ "$TARGET_DDL_DO" != "" ]); then
886+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Apply DDL SQL code"
861887
TARGET_DDL_DO_FILENAME=$(basename $TARGET_DDL_DO)
862-
docker_exec bash -c "psql -U postgres test -b -f $MACHINE_HOME/$TARGET_DDL_DO_FILENAME"
888+
docker_exec bash -c "psql --set ON_ERROR_STOP=on -U postgres test -b -f $MACHINE_HOME/$TARGET_DDL_DO_FILENAME $OUTPUT_REDIRECT"
889+
END_TIME=$(date +%s);
890+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
891+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Target DDL do code applied for $DURATION."
863892
fi
864893
# Apply initial postgres configuration
865-
echo "Apply initial postgres configuration"
894+
OP_START_TIME=$(date +%s);
866895
if ([ ! -z ${PG_CONFIG+x} ] && [ "$PG_CONFIG" != "" ]); then
896+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Apply initial postgres configuration"
867897
PG_CONFIG_FILENAME=$(basename $PG_CONFIG)
868898
docker_exec bash -c "cat $MACHINE_HOME/$PG_CONFIG_FILENAME >> /etc/postgresql/$PG_VERSION/main/postgresql.conf"
869899
if [ -z ${TARGET_CONFIG+x} ]
870900
then
871901
docker_exec bash -c "sudo /etc/init.d/postgresql restart"
872902
fi
903+
END_TIME=$(date +%s);
904+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
905+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Initial configuration applied for $DURATION."
873906
fi
874907
# Apply postgres configuration
875-
echo "Apply postgres configuration"
908+
OP_START_TIME=$(date +%s);
876909
if ([ ! -z ${TARGET_CONFIG+x} ] && [ "$TARGET_CONFIG" != "" ]); then
910+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Apply postgres configuration"
877911
TARGET_CONFIG_FILENAME=$(basename $TARGET_CONFIG)
878912
docker_exec bash -c "cat $MACHINE_HOME/$TARGET_CONFIG_FILENAME >> /etc/postgresql/$PG_VERSION/main/postgresql.conf"
879913
docker_exec bash -c "sudo /etc/init.d/postgresql restart"
914+
END_TIME=$(date +%s);
915+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
916+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Postgres configuration applied for $DURATION."
917+
fi
918+
#Save before workload log
919+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Save prepaparation log"
920+
logpath=$( \
921+
docker_exec bash -c "psql -XtU postgres \
922+
-c \"select string_agg(setting, '/' order by name) from pg_settings where name in ('log_directory', 'log_filename');\" \
923+
| grep / | sed -e 's/^[ \t]*//'"
924+
)
925+
docker_exec bash -c "gzip -c $logpath > $MACHINE_HOME/$ARTIFACTS_FILENAME.prepare.log.gz"
926+
if [[ $ARTIFACTS_DESTINATION =~ "s3://" ]]; then
927+
docker_exec s3cmd put /$MACHINE_HOME/$ARTIFACTS_FILENAME.prepare.log.gz $ARTIFACTS_DESTINATION/
928+
else
929+
if [ "$RUN_ON" = "localhost" ]; then
930+
docker cp $containerHash:$MACHINE_HOME/$ARTIFACTS_FILENAME.prepare.log.gz $ARTIFACTS_DESTINATION/
931+
elif [ "$RUN_ON" = "aws" ]; then
932+
docker-machine scp $DOCKER_MACHINE:/home/storage/$ARTIFACTS_FILENAME.prepare.log.gz $ARTIFACTS_DESTINATION/
933+
else
934+
>&2 echo "ASSERT: must not reach this point"
935+
exit 1
936+
fi
880937
fi
938+
881939
# Clear statistics and log
882-
echo "Execute vacuumdb..."
940+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Execute vacuumdb..."
883941
docker_exec vacuumdb -U postgres test -j $(cat /proc/cpuinfo | grep processor | wc -l) --analyze
884942
docker_exec bash -c "echo '' > /var/log/postgresql/postgresql-$PG_VERSION-main.log"
885943
# Execute workload
886-
echo "Execute workload..."
944+
OP_START_TIME=$(date +%s);
945+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Execute workload..."
887946
if [ ! -z ${WORKLOAD_REAL+x} ] && [ "$WORKLOAD_REAL" != '' ];then
888-
echo "Execute pgreplay queries..."
947+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Execute pgreplay queries..."
889948
docker_exec psql -U postgres test -c 'create role testuser superuser login;'
890949
WORKLOAD_FILE_NAME=$(basename $WORKLOAD_REAL)
891950
docker_exec bash -c "pgreplay -r -j $MACHINE_HOME/$WORKLOAD_FILE_NAME"
892951
else
893952
if ([ ! -z ${WORKLOAD_CUSTOM_SQL+x} ] && [ "$WORKLOAD_CUSTOM_SQL" != "" ]); then
894953
WORKLOAD_CUSTOM_FILENAME=$(basename $WORKLOAD_CUSTOM_SQL)
895-
echo "Execute custom sql queries..."
896-
docker_exec bash -c "psql -U postgres test -E -f $MACHINE_HOME/$WORKLOAD_CUSTOM_FILENAME"
954+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Execute custom sql queries..."
955+
docker_exec bash -c "psql -U postgres test -E -f $MACHINE_HOME/$WORKLOAD_CUSTOM_FILENAME $OUTPUT_REDIRECT"
897956
fi
898957
fi
958+
END_TIME=$(date +%s);
959+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
960+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Workload executed for $DURATION."
899961

900962
## Get statistics
901-
echo "Prepare JSON log..."
963+
OP_START_TIME=$(date +%s);
964+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Prepare JSON log..."
902965
docker_exec bash -c "/root/pgbadger/pgbadger \
903966
-j $(cat /proc/cpuinfo | grep processor | wc -l) \
904967
--prefix '%t [%p]: [%l-1] db=%d,user=%u (%a,%h)' /var/log/postgresql/* -f stderr \
905968
-o $MACHINE_HOME/$ARTIFACTS_FILENAME.json"
906969
#2> >(grep -v "install the Text::CSV_XS" >&2)
907970

908-
logpath=$( \
909-
docker_exec bash -c "psql -XtU postgres \
910-
-c \"select string_agg(setting, '/' order by name) from pg_settings where name in ('log_directory', 'log_filename');\" \
911-
| grep / | sed -e 's/^[ \t]*//'"
912-
)
913971
docker_exec bash -c "gzip -c $logpath > $MACHINE_HOME/$ARTIFACTS_FILENAME.log.gz"
914-
echo "Save artifcats..."
972+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Save artifcats..."
915973
if [[ $ARTIFACTS_DESTINATION =~ "s3://" ]]; then
916974
docker_exec s3cmd put /$MACHINE_HOME/$ARTIFACTS_FILENAME.json $ARTIFACTS_DESTINATION/
917975
docker_exec s3cmd put /$MACHINE_HOME/$ARTIFACTS_FILENAME.log.gz $ARTIFACTS_DESTINATION/
@@ -930,24 +988,29 @@ else
930988
exit 1
931989
fi
932990
fi
991+
END_TIME=$(date +%s);
992+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
993+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Statistics got for $DURATION."
933994

934-
echo "Apply DDL undo SQL code"
995+
OP_START_TIME=$(date +%s);
935996
if ([ ! -z ${TARGET_DDL_UNDO+x} ] && [ "$TARGET_DDL_UNDO" != "" ]); then
936-
TARGET_DDL_UNDO_FILENAME=$(basename $TARGET_DDL_UNDO)
937-
docker_exec bash -c "psql -U postgres test -b -f $MACHINE_HOME/$TARGET_DDL_UNDO_FILENAME"
997+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Apply DDL undo SQL code"
998+
TARGET_DDL_UNDO_FILENAME=$(basename $TARGET_DDL_UNDO)
999+
docker_exec bash -c "psql --set ON_ERROR_STOP=on -U postgres test -b -f $MACHINE_HOME/$TARGET_DDL_UNDO_FILENAME $OUTPUT_REDIRECT"
1000+
END_TIME=$(date +%s);
1001+
DURATION=$(echo $((END_TIME-OP_START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
1002+
echo "$(date "+%Y-%m-%d %H:%M:%S"): Target DDL undo code applied for $DURATION."
9381003
fi
9391004

940-
echo -e "Run done!"
941-
echo -e "Report: $ARTIFACTS_DESTINATION/$ARTIFACTS_FILENAME.json"
942-
echo -e "Query log: $ARTIFACTS_DESTINATION/$ARTIFACTS_FILENAME.log.gz"
1005+
END_TIME=$(date +%s);
1006+
DURATION=$(echo $((END_TIME-START_TIME)) | awk '{printf "%d:%02d:%02d", $1/3600, ($1/60)%60, $1%60}')
1007+
echo -e "$(date "+%Y-%m-%d %H:%M:%S"): Run done for $DURATION"
1008+
echo -e " Report: $ARTIFACTS_DESTINATION/$ARTIFACTS_FILENAME.json"
1009+
echo -e " Query log: $ARTIFACTS_DESTINATION/$ARTIFACTS_FILENAME.log.gz"
1010+
echo -e " -------------------------------------------"
1011+
echo -e " Summary:"
1012+
echo -e " Queries duration:\t\t" $(docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.overall_stat.queries_duration') " ms"
1013+
echo -e " Queries count:\t\t" $( docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.overall_stat.queries_number')
1014+
echo -e " Normalized queries count:\t" $(docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.normalyzed_info| length')
1015+
echo -e " Errors count:\t\t\t" $(docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.overall_stat.errors_number')
9431016
echo -e "-------------------------------------------"
944-
echo -e "Summary:"
945-
echo -e " Queries duration:\t\t" $(docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.overall_stat.queries_duration') " ms"
946-
echo -e " Queries count:\t\t" $( docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.overall_stat.queries_number')
947-
echo -e " Normalized queries count:\t" $(docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.normalyzed_info| length')
948-
echo -e " Errors count:\t\t\t" $(docker_exec cat /$MACHINE_HOME/$ARTIFACTS_FILENAME.json | jq '.overall_stat.errors_number')
949-
echo -e "-------------------------------------------"
950-
951-
sleep $DEBUG_TIMEOUT
952-
953-
echo Bye!

0 commit comments

Comments
 (0)