#!/bin/bash
cvmfs_test_name="Telemetry Aggregator: Influx"
cvmfs_test_autofs_on_startup=false
cvmfs_test_suites="quick"

source ./src/098-telemetry/setup_teardown

TEST098_REPO=lhcb.cern.ch
TEST098_MOUNTPOINT=/cvmfs/lhcb.cern.ch

CVMFS_TEST_098_TMPFILE=
CVMFS_TEST_098_PYTHON_SCRIPT=

check_counter_increase() {
  echo "Check detection of counter change"

  echo "   Mount $TEST098_REPO"
  test098_mount $TEST098_REPO "CVMFS_TELEMETRY_SEND=ON
CVMFS_TELEMETRY_RATE=5
CVMFS_INFLUX_HOST=localhost
CVMFS_INFLUX_PORT=8092
CVMFS_INFLUX_METRIC_NAME=cvmfs_client_counters"


  echo "   UDP Listener: wait for 1 package from $TEST098_REPO"
  # -W 1 ends the command after receiving 1 package
  $CVMFS_SYS_PYTHON $CVMFS_TEST_098_PYTHON_SCRIPT -d localhost -p 8092 -m 1 -i lhcb > $CVMFS_TEST_098_TMPFILE

  echo "   Do something to change counters"
  cat /cvmfs/$TEST098_REPO/*.sh > /dev/null

  echo "   UDP Listener: Wait for another package from $TEST098_REPO"
  $CVMFS_SYS_PYTHON $CVMFS_TEST_098_PYTHON_SCRIPT -d localhost -p 8092 -m 1 -i lhcb >> $CVMFS_TEST_098_TMPFILE

  echo "   Umount $TEST098_REPO"
  test098_unmount $TEST098_REPO

  # do comparison
  echo "   Check output in file $CVMFS_TEST_098_TMPFILE"
  local found=$(grep $CVMFS_TEST_098_TMPFILE -e "catalog_revision" | wc -l)

  echo "      Right number of lines?"
  [ "$found" -eq "3" ] || return 10
  
  echo "      Changes registered?"
  # gets for 1 field all the values, sorts them and extracts the unique values
  # counts the number of unique values
  # to have registered changes #values must be > 2
  # no changes are 2 values because: delta = 0, absolute value=X
  local count_static_absolute=$(grep $CVMFS_TEST_098_TMPFILE -e "absolute"\
                      | awk '{split($0,a,"n_certificate_misses="); split(a[2],b,","); print b[1]}'\
                      | sort | uniq | wc -l)
  local check_delta_static=$(grep $CVMFS_TEST_098_TMPFILE -e "_delta"\
                      | awk '{split($0,a,"n_certificate_misses="); split(a[2],b,","); print b[1]}')
  local count_dynamic_absolute=$(grep $CVMFS_TEST_098_TMPFILE -e "absolute"\
                       | awk '{split($0,a,"md5_path_cache.n_miss="); split(a[2],b,","); print b[1]}'\
                       | sort | uniq | wc -l)
  local check_delta_dynamic=$(grep $CVMFS_TEST_098_TMPFILE -e "_delta"\
                      | awk '{split($0,a,"md5_path_cache.n_miss="); split(a[2],b,","); print b[1]}')

  # static value: 1 unique value in absolute and delta value must be 0
  echo "Check results"
  echo "Static value"
  echo "   1 unique value in absolute"
  [ "$count_static_absolute" -eq "1" ] || return 11
  echo "   delta value must be 0"
  [ "$check_delta_static" -eq "0" ] || return 12

  # dynamic value: 2 unique values in absolute and delta value must NOT be 0
  # TODO(vavolkl): fix flaky test
  echo "Dynamic value"
  echo "   2 unique values in absolute"
  [ "$count_dynamic_absolute" -eq "2" ] || echo "Warning! count_dynamic_absolute not equal 2"
  echo "   delta value must NOT be 0"
  [ "$check_delta_dynamic" -eq "0" ] && echo "Warning! check_delta_dynamic equal to zero"

  echo "   ... Success"
}

cvmfs_run_test() {
  logfile=$1
  local_script_dir=$2
  trap cleanup HUP INT TERM EXIT || return $?

  echo "create temporary directory"
  CVMFS_TEST_098_TMPFILE=$(mktemp ./test098.log.XXXXXXXX)
  echo "tmpfile is $CVMFS_TEST_098_TMPFILE"


  CVMFS_TEST_098_PYTHON_SCRIPT=$local_script_dir/udp_listener.py

  check_counter_increase || return $?
  
  return 0
}
