X-Git-Url: https://gerrit.linuxfoundation.org/infra/gitweb?a=blobdiff_plain;f=shell%2Fjob-cost.sh;h=34ab5e730e5c77cd92e0fcc258c80726be4a91b5;hb=1591cbc2cf8a6cd9591cf95ef7460ff1d17feffd;hp=2264728db7084775d4b9036c5d9effa8b0aacba7;hpb=fc8963fdf93dfb1997bb8b11558c3876a2f75751;p=releng%2Fglobal-jjb.git diff --git a/shell/job-cost.sh b/shell/job-cost.sh index 2264728d..34ab5e73 100644 --- a/shell/job-cost.sh +++ b/shell/job-cost.sh @@ -8,13 +8,19 @@ # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html ############################################################################## -echo "---> build-cost.sh" +echo "---> job-cost.sh" set -euf -o pipefail # shellcheck disable=SC1090 source ~/lf-env.sh +# AWS job cost not supported, exit +if grep -qi amazon /sys/devices/virtual/dmi/id/bios_vendor ; then + echo "INFO: Not able to calculate job cost on AWS" + exit 0 +fi + lf-activate-venv python-openstackclient if [[ -z ${JOB_NAME:-} ]]; then @@ -29,7 +35,7 @@ fi if [[ -f stack-cost ]]; then echo "DEBUG: $(cat stack-cost)" echo "INFO: Retrieving Stack Cost..." - if ! stack_cost=$(fgrep "total: " stack-cost | awk '{print $2}'); then + if ! stack_cost=$(grep -F "total: " stack-cost | awk '{print $2}'); then echo "ERROR: Unable to retrieve Stack Cost, continuing anyway" stack_cost=0 fi @@ -39,21 +45,31 @@ else fi # Retrieve the current uptime (in seconds) -uptime=$(cat /proc/uptime | awk '{print $1}') +uptime=$(awk '{print $1}' /proc/uptime) # Convert to integer by truncating fractional part' and round up by one ((uptime=${uptime%\.*}+1)) +# EC2 and OpenStack have simiar instace metadata APIs at this IP +# AWS docs: https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instancedata-data-retrieval.html +# Nova docs: https://docs.openstack.org/nova/latest/user/metadata.html instance_type=$(curl -s http://169.254.169.254/latest/meta-data/instance-type) echo "INFO: Retrieving Pricing Info for: $instance_type" url="https://pricing.vexxhost.net/v1/pricing/$instance_type/cost?seconds=$uptime" -jason_block=$(curl -s $url) +json_block=$(curl -s "$url") -cost=$(jq .cost <<< $jason_block) -resource=$(jq .resource <<< $jason_block | tr -d '"') +# check if JSON returned and can be parsed +if jq <<< "$json_block"; then + cost=$(jq .cost <<< "$json_block") + resource=$(jq .resource <<< "$json_block" | tr -d '"') +else + echo "ERROR: Pricing API returned invalid json" + cost=0 + resource=0 +fi # Archive the cost date -mkdir -p $WORKSPACE/archives/cost +mkdir -p "$WORKSPACE/archives/cost" echo "INFO: Archiving Costs" @@ -61,7 +77,6 @@ echo "INFO: Archiving Costs" # This format is readable by spreadsheet and is easily sortable date=$(TZ=GMT date +'%Y-%m-%d %H:%M:%S') -cat << EOF > $WORKSPACE/archives/cost.csv +cat << EOF > "$WORKSPACE/archives/cost.csv" $JOB_NAME,$BUILD_NUMBER,$date,$resource,$uptime,$cost,$stack_cost EOF -