Home | History | Annotate | Download | only in contrib
      1 #!/bin/bash
      2 #
      3 # usage: suite_times [ status.log ]
      4 #
      5 # Parses a "status.log" file for a suite job, and for each test that
      6 # ran, report these timeline data from the log:
      7 #   1. hostname of the DUT that the test ran on
      8 #   2. time_t value of the time that the test started running
      9 #   3. total run time of the test on the DUT
     10 #   4. number of seconds between this test's start time and the
     11 #       start time of the last prior test on the same DUT
     12 #   5. name of the test
     13 #
     14 # This script is meant as a simple building block.  Below are
     15 # some sample uses.
     16 #
     17 # Print average inter-test time:
     18 #   suite_times | awk '{if ($4) {sum += $4; cnt++}} END {print sum / cnt}'
     19 #
     20 # Print average test run time:
     21 #   suite_times | awk '{sum += $3} END {print sum / NR}'
     22 #
     23 # Print time line for a host:
     24 #   suite_times | grep $HOST
     25 
     26 
     27 PROCESS_SUITE='
     28   $1 == "START" && $2 != "----" {
     29     host = gensub(".*/(.*)/.*", "\\1", 1, $2)
     30     test = $3
     31     start_ts = gensub(".*=", "", 1, $4)
     32     old_ts = hosttimes[host]
     33     if (!old_ts) { old_ts = start_ts }
     34     start_rel = start_ts - old_ts
     35     hosttimes[host] = start_ts
     36   }
     37 
     38   $1 == "GOOD" {
     39     end_ts = gensub(".*=", "", 1, $4)
     40     runtime = end_ts - start_ts
     41     printf "%s %d %4d %4d %s\n", host, start_ts, runtime, start_rel, test
     42   }
     43 '
     44 
     45 if [ $# -eq 0 ]; then
     46   STATUS_LOG=status.log
     47 elif [ $# -eq 1 ]; then
     48   STATUS_LOG="$1"
     49 else
     50   echo "usage: $(basename $0) [ status.log ]" >&2
     51   exit 1
     52 fi
     53 
     54 awk "$PROCESS_SUITE" "$STATUS_LOG"
     55