Files
impala/testdata/bin/run-step.sh
Henry Robinson 2648bfbd90 Improve message output from run-step.sh
run-step prints a message to tell the reader what it's doing. However,
that message wasn't flushed so that run-step could print OK or FAILED on
the same line. The result was that long-running steps wouldn't print
anything to the log until they were done, at least in Jenkins contexts.

This patch changes it so that the message is flushed, and then the
result is printed on a separate line (including the time it took to run
the step).

  $ run-step "Hello world!" helloworld.out sleep 5
  Hello world! (logging to /tmp/helloworld.out)...
      OK (Took: 0 min 5 sec)

Change-Id: Iaced729f0ef6aa93174cd90b1516d3c34fe41a22
Reviewed-on: http://gerrit.cloudera.org:8080/5116
Reviewed-by: Alex Behm <alex.behm@cloudera.com>
Tested-by: Internal Jenkins
2016-11-17 09:35:14 +00:00

53 lines
1.8 KiB
Bash
Executable File

#!/bin/bash
#
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#
# run-step helper function used by multiple scripts. To use in a bash script, just
# source this file.
# Function to run a build step that logs output to a file and only
# outputs if there is an error.
# Usage: run-step <step description> <log file name> <cmd> <arg1> <arg2> ...
# LOG_DIR must be set to a writable directory for logs.
function run-step {
local MSG=$1
shift
local LOG_FILE_NAME=$1
shift
if [ ! -d "${LOG_DIR}" ]; then
echo "LOG_DIR must be set to a valid directory: ${LOG_DIR}"
return 1
fi
local LOG=${LOG_DIR}/${LOG_FILE_NAME}
echo "${MSG} (logging to ${LOG})... "
echo "Log for command '$@'" > ${LOG}
START_TIME=$SECONDS
if ! "$@" >> ${LOG} 2>&1 ; then
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo " FAILED (Took: $(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec)"
echo " '$@' failed. Tail of log:"
tail -n50 ${LOG}
return 1
fi
ELAPSED_TIME=$(($SECONDS - $START_TIME))
echo " OK (Took: $(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec)"
}