#!/bin/bash

# Copyright 2013 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Produce metrics analyzing the output of a stress test

source "$(dirname ${0})/stress_test_common"

set -e

# Given a token, search for and compute the percentiles from logfile.
compute_percentiles() {
  if [ ! -z "${1}" ]; then
    local pctls=".5 .9 1"
    local lines=$(count_result ${1})
    for p in $pctls; do
      local count="$(echo "${lines} * $p" | bc -lq | cut -d. -f1)"
      echo -n $(cat ${log} \
        | grep ${1} \
        | cut -d' ' -f2 \
        | sort -n \
        | head -n$count \
        | tail -n1)
      echo -n "s "
    done
  fi
}

main() {
  if [ $# -lt 1 ]; then
    cat <<EOF

USAGE: $(basename ${0}) logfile

Analyze the logfile of a stress test and produce metrics.

EOF
    exit 1
  fi

  local log="${1}"
  if [ ! -f "${log}" ]; then
    error "\"${log}\" not found"
    exit 1
  fi

  cat <<EOF
$(count_result "PASS_COURGETTE") successful courgette patches
$(count_result "FAIL_COURGETTE") failed courgette patches
$(count_result "FAIL_DISASSEMBLE") failed to disassemble/assemble
$(count_result "PASS_BSDIFF") succesful bsdiff patches
$(count_result "FAIL_BSDIFF") failed bsdiff patches
$(count_result "BEST_COURGETTE") patch(es) where courgette is smaller (bz2)
$(count_result "BEST_BSDIFF") patch(es) where bsdiff is smaller (bz2)
$(count_result "BEST_TIE") patch(es) where both are the same size (bz2)
$(count_result "XZBEST_COURGETTE") patch(es) where courgette (xz) is smaller
$(count_result "XZBEST_BSDIFF") patch(es) where bsdiff is smaller (xz)
$(count_result "XZBEST_TIE") patch(es) where both are the same size (xz)
EOF

  # Log file has the format "^SIZE courgette=... bsdiff=..."
  local courgette_total="$(cat "${log}" \
    | grep "^SIZE " \
    | cut -d' ' -f2 \
    | awk -F= 'BEGIN{sum=0} {sum += $2} END{print sum}')"
  echo "${courgette_total} bytes for a courgette payload (bz2)"

  local courgette_total_xz="$(cat "${log}" \
    | grep "^SIZE " \
    | cut -d' ' -f4 \
    | awk -F= 'BEGIN{sum=0} {sum += $2} END{print sum}')"
  echo "${courgette_total_xz} bytes for a courgette payload (xz)"

  local bsdiff_total="$(cat "${log}" \
    | grep "^SIZE " \
    | cut -d' ' -f3 \
    | awk -F= 'BEGIN{sum=0} {sum += $2} END{print sum}')"
  echo "${bsdiff_total} bytes for a bsdiff payload"

  local best_total="$(cat "${log}" \
    | grep "^BEST_" \
    | awk 'BEGIN{sum=0} {sum += $2} END{print sum}')"
    echo "${best_total} bytes for a best-choice payload (bz2)"

  local best_total_xz="$(cat "${log}" \
    | grep "^XZBEST_" \
    | awk 'BEGIN{sum=0} {sum += $2} END{print sum}')"
    echo "${best_total_xz} bytes for a best-choice payload (xz)"

  local pct="$(echo "100*${best_total}/${bsdiff_total}" \
    | bc -lq \
    | awk '{printf "%.2f\n", $0}')"
    echo "${pct}% of a bsdiff-only payload (bz2)"

  local pct="$(echo "100*${best_total_xz}/${bsdiff_total}" \
    | bc -lq \
    | awk '{printf "%.2f\n", $0}')"
    echo "${pct}% of a bsdiff-only payload (xz)"

  local savings="$((bsdiff_total - best_total))"
  echo "${savings} bytes saved by courgette (bz2)"

  local savings_xz="$((bsdiff_total - best_total_xz))"
  echo "${savings} bytes saved by courgette (xz)"

  local pct_savings="$(echo "100*${savings}/${bsdiff_total}" \
    | bc -lq \
    | awk '{printf "%.2f\n", $0}')"
  echo "${pct_savings}% savings (bz2)"

  local pct_savings="$(echo "100*${savings_xz}/${bsdiff_total}" \
    | bc -lq \
    | awk '{printf "%.2f\n", $0}')"
  echo "${pct_savings}% savings (xz)"

  echo "$(compute_percentiles "TIME_GEN")to generate a patch (50th 90th 100th)"
  echo "$(compute_percentiles "TIME_APPLY")to apply a patch (50th 90th 100th)"
  echo "$(compute_percentiles "TIME_BSDIFF")for bsdiff (50th 90th 100th)"
  echo "$(compute_percentiles "TIME_BSPATCH")for bspatch (50th 90th 100th)"
}

main "${@}"
