#!/bin/bash
cd "$(dirname "$0")"

echo "Processing ALL rphost (with DB name)"

tmp="global_with_db.tmp"

cat rphost_*/* | \
grep -iP ',CALL,.*Context=' | \
perl -pe 's/^\d\d:\d\d\.\d+-(\d+),CALL,.*p:processName=([^,]+),.*Context=(.*),Interface=.*Memory=(-?\d+),MemoryPeak=(-?\d+),InBytes=(\d+),OutBytes=(\d+),CpuTime=(\d+)/\2|\3|\4|\5|\6|\7|\8/;' \
> "$tmp"


# CPU

awk -F'|' '{
  db=$1; ctx=$2; val=$7;
  key=db " | " ctx;

  Sum[key]+=val; Count[key]++;
  if (val>Max[key]) Max[key]=val;
}
END {
  for (i in Count)
    printf "%d %d %d %d - %s\n", Sum[i], Sum[i]/Count[i], Count[i], Max[i], i
}' "$tmp" | sort -rnb | head -n 20 > "GLOBAL_DB_Top_CpuTime.txt"


# Memory

awk -F'|' '{
  db=$1; ctx=$2; val=$3;
  key=db " | " ctx;

  Sum[key]+=val; Count[key]++;
  if (val>Max[key]) Max[key]=val;
}
END {
  for (i in Count)
    printf "%d %d %d %d - %s\n", Sum[i], Sum[i]/Count[i], Count[i], Max[i], i
}' "$tmp" | sort -rnb | head -n 20 > "GLOBAL_DB_Top_Memory.txt"


# MemoryPeak

awk -F'|' '{
  db=$1; ctx=$2; val=$4;
  key=db " | " ctx;

  Sum[key]+=val; Count[key]++;
  if (val>Max[key]) Max[key]=val;
}
END {
  for (i in Count)
    printf "%d %d %d %d - %s\n", Sum[i], Sum[i]/Count[i], Count[i], Max[i], i
}' "$tmp" | sort -rnb | head -n 20 > "GLOBAL_DB_Top_MemoryPeak.txt"


# InBytes

awk -F'|' '{
  db=$1; ctx=$2; val=$5;
  key=db " | " ctx;

  Sum[key]+=val; Count[key]++;
  if (val>Max[key]) Max[key]=val;
}
END {
  for (i in Count)
    printf "%d %d %d %d - %s\n", Sum[i], Sum[i]/Count[i], Count[i], Max[i], i
}' "$tmp" | sort -rnb | head -n 20 > "GLOBAL_DB_Top_InBytes.txt"


# OutBytes

awk -F'|' '{
  db=$1; ctx=$2; val=$6;
  key=db " | " ctx;

  Sum[key]+=val; Count[key]++;
  if (val>Max[key]) Max[key]=val;
}
END {
  for (i in Count)
    printf "%d %d %d %d - %s\n", Sum[i], Sum[i]/Count[i], Count[i], Max[i], i
}' "$tmp" | sort -rnb | head -n 20 > "GLOBAL_DB_Top_OutBytes.txt"

rm -f "$tmp"

echo "done, all files're ready!"