| #!/bin/bash |
| # |
| # Starts the telemetry_slave_scripts/vm_run_pdf_viewer.sh script on all |
| # slaves. |
| # |
| # The script should be run from the cluster-telemetry-master GCE instance's |
| # /b/skia-repo/buildbot/cluster_telemetry/telemetry_master_scripts |
| # directory. |
| # |
| # Copyright 2013 Google Inc. All Rights Reserved. |
| # Author: rmistry@google.com (Ravi Mistry) |
| |
| if [ $# -ne 5 ]; then |
| echo |
| echo "Usage: `basename $0` rmistry@google.com rmistry-2013-05-24.07-34-05" \ |
| "1001 /tmp/logfile" |
| echo |
| echo "The first argument is the email address of the requester." |
| echo "The second argument is a unique runid (typically requester + timestamp)." |
| echo "The third argument is the type of pagesets to create from the 1M list" \ |
| "Eg: All, Filtered, 100k, 10k, Deeplinks." |
| echo "The fourth argument is the key of the appengine telemetry task." |
| echo "The fifth argument is the location of the log file." |
| echo |
| exit 1 |
| fi |
| |
| REQUESTER_EMAIL=$1 |
| RUN_ID=$2 |
| PAGESETS_TYPE=$3 |
| APPENGINE_KEY=$4 |
| LOG_FILE_LOCATION=$5 |
| |
| source ../config.sh |
| source vm_utils.sh |
| |
| # Update buildbot. |
| gclient sync |
| |
| # Run vm_run_pdf_viewer.sh on all the slaves. |
| for SLAVE_NUM in $(seq 1 $NUM_SLAVES); do |
| CMD="bash vm_run_pdf_viewer.sh $SLAVE_NUM $RUN_ID $PAGESETS_TYPE" |
| ssh -f -X -o UserKnownHostsFile=/dev/null -o CheckHostIP=no \ |
| -o StrictHostKeyChecking=no \ |
| -A -p 22 build${SLAVE_NUM}-m5 -- "source .bashrc; cd /b/skia-repo/buildbot/cluster_telemetry/telemetry_slave_scripts; /b/depot_tools/gclient sync; $CMD > /tmp/pdfviewer-${RUN_ID}_output.txt 2>&1" |
| done |
| |
| # Sleep for a minute to give the slaves some time to start processing. |
| sleep 60 |
| |
| # Check to see if the slaves are done with this pdfviewer request. |
| SLAVES_STILL_PROCESSING=true |
| while $SLAVES_STILL_PROCESSING ; do |
| SLAVES_STILL_PROCESSING=false |
| for SLAVE_NUM in $(seq 1 $NUM_SLAVES); do |
| RET=$( is_slave_currently_executing $SLAVE_NUM PDF_VIEWER.${RUN_ID} ) |
| if $RET; then |
| echo "cluster-telemetry-worker$SLAVE_NUM is still running PDF_VIEWER.${RUN_ID}" |
| echo "Sleeping for a minute and then retrying" |
| SLAVES_STILL_PROCESSING=true |
| sleep 60 |
| break |
| else |
| echo "cluster-telemetry-worker$SLAVE_NUM is done processing." |
| fi |
| done |
| done |
| |
| # Copy over the outputs from all slaves and consolidate them into one file. |
| LOGS_DIR=/b/storage/pdf_logs |
| files=( "expected-skp.csv" "pdf-skp.csv" "actual-skp.csv" "csv-skp.csv" "csv-actual.csv" "result.csv" ) |
| for SLAVE_NUM in $(seq 1 $NUM_SLAVES); do |
| mkdir -p $LOGS_DIR/$RUN_ID/$SLAVE_NUM |
| for file in "${files[@]}"; do |
| gsutil cp gs://chromium-skia-gm/telemetry/pdfviewer/slave$SLAVE_NUM/outputs/${RUN_ID}/$file \ |
| $LOGS_DIR/$RUN_ID/$SLAVE_NUM/$file |
| cat $LOGS_DIR/$RUN_ID/$SLAVE_NUM/$file >> $LOGS_DIR/$RUN_ID/$file |
| done |
| done |
| |
| # Copy the consolidated files into Google Storage. |
| for file in "${files[@]}"; do |
| gsutil cp -a public-read $LOGS_DIR/$RUN_ID/$file \ |
| gs://chromium-skia-gm/telemetry/pdfviewer/consolidated-outputs/$RUN_ID/${file}.txt |
| done |
| OUTPUT_LINK=https://storage.cloud.google.com/chromium-skia-gm/telemetry/pdfviewer/consolidated-outputs/$RUN_ID |
| |
| # Delete all tmp files. |
| # rm -rf $LOGS_DIR/*$RUN_ID* |
| # rm -rf /tmp/*$RUN_ID* |
| |
| # Email the requester. |
| BOUNDARY=`date +%s|md5sum` |
| BOUNDARY=${BOUNDARY:0:32} |
| sendmail $REQUESTER_EMAIL <<EOF |
| subject:Your PDF Viewer task has completed! |
| to:$REQUESTER_EMAIL |
| Content-Type: multipart/mixed; boundary=\"$BOUNDARY\"; |
| |
| This is a MIME-encapsulated message |
| |
| --$BOUNDARY |
| Content-Type: text/html |
| |
| <html> |
| <head/> |
| <body> |
| The output of your script is available <a href='$OUTPUT_LINK'>here</a>.<br/> |
| Thanks! |
| </body> |
| </html> |
| |
| --$BOUNDARY-- |
| |
| EOF |
| |
| # Mark this task as completed on AppEngine. |
| PASSWORD=`cat /b/skia-repo/buildbot/cluster_telemetry/telemetry_master_scripts/appengine_password.txt` |
| wget --post-data "key=$APPENGINE_KEY&password=$PASSWORD" "https://skia-tree-status.appspot.com/skia-telemetry/update_admin_task" -O /dev/null |
| |
| # Delete the log file since this task is now done. |
| rm $LOG_FILE_LOCATION |