@@ -5,6 +5,7 @@ CURRENT_TS=$(date +%Y%m%d_%H%M%S%N_%Z)
5
5
DOCKER_MACHINE=" nancy-$CURRENT_TS "
6
6
DOCKER_MACHINE=" ${DOCKER_MACHINE// _/ -} "
7
7
DEBUG_TIMEOUT=0
8
+ OUTPUT_REDIRECT=" > /dev/null"
8
9
EBS_SIZE_MULTIPLIER=15
9
10
10
11
# # Get command line params
@@ -180,7 +181,10 @@ while true; do
180
181
181
182
" | less -RFX
182
183
exit ;;
183
- -d | --debug ) DEBUG=1; shift ;;
184
+ -d | --debug )
185
+ DEBUG=1;
186
+ OUTPUT_REDIRECT=' ' ;
187
+ shift ;;
184
188
--run-on )
185
189
RUN_ON=" $2 " ; shift 2 ;;
186
190
--container-id )
@@ -535,10 +539,12 @@ function checkParams() {
535
539
536
540
checkParams;
537
541
542
+ START_TIME=$( date +%s) ;
543
+
538
544
# Determine dump file size
539
545
if ([ " $RUN_ON " == " aws" ] && [ ! ${AWS_EC2_TYPE: 0: 2} == " i3" ] && \
540
546
[ -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."
542
548
dumpFileSize=0
543
549
if [[ $DB_DUMP_PATH =~ " s3://" ]]; then
544
550
dumpFileSize=$( s3cmd info $DB_DUMP_PATH | grep " File size:" )
@@ -557,9 +563,9 @@ if ([ "$RUN_ON" == "aws" ] && [ ! ${AWS_EC2_TYPE:0:2} == "i3" ] && \
557
563
let ebsSize=$dumpFileSize
558
564
ebsSize=$( numfmt --to-unit=G $ebsSize )
559
565
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"
561
567
else
562
- echo " EBS volume is not require."
568
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : EBS volume is not require."
563
569
fi
564
570
fi
565
571
@@ -601,15 +607,15 @@ function waitEC2Ready() {
601
607
# 5) key pair name
602
608
# 6) key path
603
609
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..."
605
611
docker-machine create --driver=amazonec2 \
606
612
--amazonec2-request-spot-instance \
607
613
--amazonec2-keypair-name=" $5 " \
608
614
--amazonec2-ssh-keypath=" $6 " \
609
- --amazonec2-block-duration-minutes=$4 \
610
615
--amazonec2-instance-type=$2 \
611
616
--amazonec2-spot-price=$3 \
612
617
$1 2> >( grep -v " failed waiting for successful resource state" >&2 ) &
618
+ # --amazonec2-block-duration-minutes=$4 \
613
619
}
614
620
615
621
function destroyDockerMachine() {
@@ -622,11 +628,17 @@ function destroyDockerMachine() {
622
628
# when we have "price-too-low" attempts, such errors come in few minutes
623
629
# after an attempt and are generally unexpected by user.
624
630
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 "
626
632
}
627
633
628
634
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
630
642
docker $dockerConfig exec -i ${containerHash} sh -c " sudo rm -rf $MACHINE_HOME "
631
643
rm -f " $TMP_PATH /after_db_init_code_tmp.sql"
632
644
rm -f " $TMP_PATH /before_db_init_code_tmp.sql"
@@ -636,16 +648,16 @@ function cleanupAndExit {
636
648
rm -f " $TMP_PATH /target_config_tmp.conf"
637
649
rm -f " $TMP_PATH /pg_config_tmp.conf"
638
650
if [ " $RUN_ON " = " localhost" ]; then
639
- echo " Remove docker container"
651
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Remove docker container"
640
652
docker container rm -f $containerHash
641
653
elif [ " $RUN_ON " = " aws" ]; then
642
654
destroyDockerMachine $DOCKER_MACHINE
643
655
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 "
645
657
sleep 60 # wait to machine removed
646
658
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
649
661
else
650
662
>&2 echo " ASSERT: must not reach this point"
651
663
exit 1
@@ -675,18 +687,18 @@ elif [[ "$RUN_ON" = "aws" ]]; then
675
687
maxprice=$( echo $prices | jq ' max_by(.price) | .price' )
676
688
maxprice=" ${maxprice/ \" / } "
677
689
maxprice=" ${maxprice/ \" / } "
678
- echo " Max price from history: $maxprice "
690
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Max price from history: $maxprice "
679
691
multiplier=" 1.1"
680
692
price=$( echo " $maxprice * $multiplier " | bc -l)
681
- echo " Increased price: $price "
693
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Increased price: $price "
682
694
EC2_PRICE=$price
683
695
684
696
createDockerMachine $DOCKER_MACHINE $AWS_EC2_TYPE $EC2_PRICE \
685
697
60 $AWS_KEY_PAIR $AWS_KEY_PATH ;
686
698
status=$( waitEC2Ready " docker-machine create" " $DOCKER_MACHINE " 1)
687
699
if [ " $status " == " price-too-low" ]
688
700
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..."
690
702
691
703
# destroyDockerMachine $DOCKER_MACHINE
692
704
# "docker-machine rm" doesn't work for "price-too-low" spot requests,
@@ -710,31 +722,31 @@ elif [[ "$RUN_ON" = "aws" ]]; then
710
722
DOCKER_MACHINE=" nancy-$CURRENT_TS "
711
723
DOCKER_MACHINE=" ${DOCKER_MACHINE// _/ -} "
712
724
# 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 ."
714
726
createDockerMachine $DOCKER_MACHINE $AWS_EC2_TYPE $EC2_PRICE \
715
727
60 $AWS_KEY_PAIR $AWS_KEY_PATH ;
716
728
waitEC2Ready " docker-machine create" " $DOCKER_MACHINE " 0;
717
729
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 ."
719
731
exit 1;
720
732
fi
721
733
fi
722
734
723
- echo " Check a docker machine status."
735
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Check a docker machine status."
724
736
res=$( docker-machine status $DOCKER_MACHINE 2>&1 & )
725
737
if [ " $res " != " Running" ]
726
738
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."
728
740
exit 1;
729
741
fi
730
- echo " Docker $DOCKER_MACHINE is running."
742
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Docker $DOCKER_MACHINE is running."
731
743
732
744
docker-machine ssh $DOCKER_MACHINE " sudo sh -c \" mkdir /home/storage\" "
733
745
if [ ${AWS_EC2_TYPE: 0: 2} == ' i3' ]
734
746
then
735
- echo " Attempt use high speed disk"
747
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Attempt use high speed disk"
736
748
# 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"
738
750
docker-machine ssh $DOCKER_MACHINE sudo add-apt-repository -y ppa:sbates
739
751
docker-machine ssh $DOCKER_MACHINE sudo apt-get update || :
740
752
docker-machine ssh $DOCKER_MACHINE sudo apt-get install -y nvme-cli
@@ -750,11 +762,11 @@ elif [[ "$RUN_ON" = "aws" ]]; then
750
762
docker-machine ssh $DOCKER_MACHINE sudo mkfs -t ext4 /dev/nvme0n1p1
751
763
docker-machine ssh $DOCKER_MACHINE sudo mount /dev/nvme0n1p1 /home/storage
752
764
else
753
- echo " Attempt use external disk"
765
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Attempt use external disk"
754
766
# Create new volume and attach them for non i3 instances if needed
755
767
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"
758
770
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)
759
771
INSTANCE_ID=$( docker-machine ssh $DOCKER_MACHINE curl -s http://169.254.169.254/latest/meta-data/instance-id)
760
772
sleep 10 # wait to volume will ready
@@ -786,7 +798,7 @@ if [[ "$RUN_ON" = "aws" ]]; then
786
798
MACHINE_HOME=" $MACHINE_HOME /storage"
787
799
docker_exec sh -c " chmod a+w /storage"
788
800
789
- echo " Move posgresql to separated disk"
801
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Move posgresql to separated disk"
790
802
docker_exec bash -c " sudo /etc/init.d/postgresql stop"
791
803
sleep 2 # wait for postgres stopped
792
804
docker_exec bash -c " sudo mv /var/lib/postgresql /storage/"
@@ -828,90 +840,136 @@ function copyFile() {
828
840
# Dump
829
841
sleep 2 # wait for postgres up&running
830
842
831
- echo " Apply sql code before db init "
843
+ OP_START_TIME= $( date +%s ) ;
832
844
if ([ ! -z ${BEFORE_DB_INIT_CODE+x} ] && [ " $BEFORE_DB_INIT_CODE " != " " ])
833
845
then
846
+ echo " $( date " +%Y-%m-%d %H:%M:%S" ) : Apply sql code before db init"
834
847
BEFORE_DB_INIT_CODE_FILENAME=$( basename $BEFORE_DB_INIT_CODE )
835
848
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 ."
837
854
fi
838
- echo " Restore database dump"
855
+ OP_START_TIME=$( date +%s) ;
856
+ echo " $( date " +%Y-%m-%d %H:%M:%S" ) : Restore database dump"
839
857
case " $DB_DUMP_EXT " in
840
858
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 "
842
860
;;
843
861
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 "
845
863
;;
846
864
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 "
848
866
;;
849
867
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 ."
850
871
# After init database sql code apply
851
- echo " Apply sql code after db init "
872
+ OP_START_TIME= $( date +%s ) ;
852
873
if ([ ! -z ${AFTER_DB_INIT_CODE+x} ] && [ " $AFTER_DB_INIT_CODE " != " " ])
853
874
then
875
+ echo " $( date " +%Y-%m-%d %H:%M:%S" ) : Apply sql code after db init"
854
876
AFTER_DB_INIT_CODE_FILENAME=$( basename $AFTER_DB_INIT_CODE )
855
877
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 ."
857
882
fi
858
883
# Apply DDL code
859
- echo " Apply DDL SQL code "
884
+ OP_START_TIME= $( date +%s ) ;
860
885
if ([ ! -z ${TARGET_DDL_DO+x} ] && [ " $TARGET_DDL_DO " != " " ]); then
886
+ echo " $( date " +%Y-%m-%d %H:%M:%S" ) : Apply DDL SQL code"
861
887
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 ."
863
892
fi
864
893
# Apply initial postgres configuration
865
- echo " Apply initial postgres configuration "
894
+ OP_START_TIME= $( date +%s ) ;
866
895
if ([ ! -z ${PG_CONFIG+x} ] && [ " $PG_CONFIG " != " " ]); then
896
+ echo " $( date " +%Y-%m-%d %H:%M:%S" ) : Apply initial postgres configuration"
867
897
PG_CONFIG_FILENAME=$( basename $PG_CONFIG )
868
898
docker_exec bash -c " cat $MACHINE_HOME /$PG_CONFIG_FILENAME >> /etc/postgresql/$PG_VERSION /main/postgresql.conf"
869
899
if [ -z ${TARGET_CONFIG+x} ]
870
900
then
871
901
docker_exec bash -c " sudo /etc/init.d/postgresql restart"
872
902
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 ."
873
906
fi
874
907
# Apply postgres configuration
875
- echo " Apply postgres configuration "
908
+ OP_START_TIME= $( date +%s ) ;
876
909
if ([ ! -z ${TARGET_CONFIG+x} ] && [ " $TARGET_CONFIG " != " " ]); then
910
+ echo " $( date " +%Y-%m-%d %H:%M:%S" ) : Apply postgres configuration"
877
911
TARGET_CONFIG_FILENAME=$( basename $TARGET_CONFIG )
878
912
docker_exec bash -c " cat $MACHINE_HOME /$TARGET_CONFIG_FILENAME >> /etc/postgresql/$PG_VERSION /main/postgresql.conf"
879
913
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
880
937
fi
938
+
881
939
# Clear statistics and log
882
- echo " Execute vacuumdb..."
940
+ echo " $( date " +%Y-%m-%d %H:%M:%S " ) : Execute vacuumdb..."
883
941
docker_exec vacuumdb -U postgres test -j $( cat /proc/cpuinfo | grep processor | wc -l) --analyze
884
942
docker_exec bash -c " echo '' > /var/log/postgresql/postgresql-$PG_VERSION -main.log"
885
943
# Execute workload
886
- echo " Execute workload..."
944
+ OP_START_TIME=$( date +%s) ;
945
+ echo " $( date " +%Y-%m-%d %H:%M:%S" ) : Execute workload..."
887
946
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..."
889
948
docker_exec psql -U postgres test -c ' create role testuser superuser login;'
890
949
WORKLOAD_FILE_NAME=$( basename $WORKLOAD_REAL )
891
950
docker_exec bash -c " pgreplay -r -j $MACHINE_HOME /$WORKLOAD_FILE_NAME "
892
951
else
893
952
if ([ ! -z ${WORKLOAD_CUSTOM_SQL+x} ] && [ " $WORKLOAD_CUSTOM_SQL " != " " ]); then
894
953
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 "
897
956
fi
898
957
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 ."
899
961
900
962
# # 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..."
902
965
docker_exec bash -c " /root/pgbadger/pgbadger \
903
966
-j $( cat /proc/cpuinfo | grep processor | wc -l) \
904
967
--prefix '%t [%p]: [%l-1] db=%d,user=%u (%a,%h)' /var/log/postgresql/* -f stderr \
905
968
-o $MACHINE_HOME /$ARTIFACTS_FILENAME .json"
906
969
# 2> >(grep -v "install the Text::CSV_XS" >&2)
907
970
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
- )
913
971
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..."
915
973
if [[ $ARTIFACTS_DESTINATION =~ " s3://" ]]; then
916
974
docker_exec s3cmd put /$MACHINE_HOME /$ARTIFACTS_FILENAME .json $ARTIFACTS_DESTINATION /
917
975
docker_exec s3cmd put /$MACHINE_HOME /$ARTIFACTS_FILENAME .log.gz $ARTIFACTS_DESTINATION /
@@ -930,24 +988,29 @@ else
930
988
exit 1
931
989
fi
932
990
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 ."
933
994
934
- echo " Apply DDL undo SQL code "
995
+ OP_START_TIME= $( date +%s ) ;
935
996
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 ."
938
1003
fi
939
1004
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' )
943
1016
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