#! /bin/bash # @(#)(CAcert) $Id: ocspstats,v 1.3 2015/08/13 13:37:50 wytze Exp $ # ocspstats - display data about OCSP request rates # # format of a record as extracted from compressed logfiles # filename:YYYY-MM-DDThh:mm:ss.mmmmmm+00:00 ocsp ocspd[pid]: info: NREQ xx NREP xx NERR xx # filename:YYYY-MM-DDThh:mm:ss.mmmmmm+00:00 ocsp ocspd[pid]: Exiting, Glad to serve you, Master! PROG=`basename $0` usage() { echo "Usage: ${PROG} [-d | -m | -w] [-q] [logfile]" 1>&2 exit 1 } TEMP=`getopt \ -o dmwq \ --long daily,monthly,weekly,quiet \ -n ${PROG} -- "$@"` if [ $? != 0 ] then usage fi eval set -- "${TEMP}" while true do case "$1" in -d|--daily) FREQ="%j"; shift ;; -m|--monthly) FREQ="%m"; shift ;; -w|--weekly) FREQ="%W"; shift ;; -q|--quiet) QUIET=true; shift ;; --) shift; break ;; *) echo "${PROG}: Internal error!" 1>&2 exit 1 ;; esac done LF=/tmp/ocspstats.$$ trap "rm -f ${LF}" 0 1 2 3 15 case $# in 0) sudo cat /var/log/messages >${LF} ;; 1) LF=$1 ;; *) usage ;; esac if [ ! -r ${LF} ] then echo "$0: cannot read ${LF}" 1>&2 exit 2 fi function analyze() { gawk ' BEGIN { freq ="'${FREQ}'" quiet ="'${QUIET}'" nreq = nrep = nerr = 0 nreqprev = nrepprev = nerrprev = -1 nreqtotal = nreptotal = nerrtotal = 0 starttime = -1 prevperiod = "" fmt = "%-16s %8s %8s %8s %8s %8s %8s %6s\n" printf fmt, "Date/time", "NREQ", "NREP", "NERR", "CumNREP", "CumNREQ", "CumNERR", "AvRate" } function display(value) { if (value >= 1000000000000) return sprintf("%.1f T", value / 1000000000000) if (value >= 1000000000) return sprintf("%.1f G", value / 1000000000) if (value >= 1000000) return sprintf("%.1f M", value / 1000000) else if (value >= 1000) return sprintf("%.1f K", value / 1000) else return sprintf("%5.1f", value) } function process_data(inp, out, err, nreqdiff, nrepdiff, nerrdiff) # params: inp, out, err # local: nreqdiff, nrepxdiff, nerrdiff # global: nreq, nrep, nerr, nreqprev, nrepprev, nerrprev { status = "" nreqdiff = (nreqprev != -1) ? (inp - nreqprev) : 0 nrepdiff = (nrepprev != -1) ? (out - nrepprev) : 0 nerrdiff = (nerrprev != -1) ? (err - nerrprev) : 0 if (nreqdiff < 0 && nrepdiff < 0) { if (inp != 0 || out != 0 || err != 0) { status = "server reset assumed" } else { # server ended, so reset is expected } nreqdiff = inp nrepdiff = out nerrdiff = err } nreq += nreqdiff nrep += nrepdiff nerr += nerrdiff nreqprev = inp nrepprev = out nerrprev = err return(status) } function print_data( elapsed, average) # local: elapsed, average # global: nreq, nrep, nerr, nreqotal, nreptotal, nerrtotal, timestamp, starttime { nreqtotal += nreq nreptotal += nrep nerrtotal += nerr elapsed = timestamp - starttime average = (elapsed > 0) ? (nreqtotal) / elapsed : 0 printf fmt, strftime("%d.%m.%Y %R", timestamp), display(nreq), display(nrep), display(nerr), display(nreqtotal), display(nreqtotal), display(nerrtotal), display(average) "/s" nreq = nrep = nerr = 0 } { timestamp = $1 if (freq != "") period = strftime(freq, timestamp) if (starttime == -1) starttime = timestamp if ((status = process_data($2, $3, $4)) != "" && quiet != "true") printf "%24s %s (%u)\n", strftime("%c", timestamp), status, timestamp if (freq == "" || period != prevperiod) { print_data() prevperiod = period } } END { if (!(freq == "" || period != prevperiod)) print_data() printf "\n" } ' } grep -H -F "info: NREQ Exiting, Glad to serve you, Master" ${LF} |\ gawk -F' ' ' { n = split($1, arr, "-") year = substr(arr[1], length(arr[1]) - 3, 4) month = arr[2] day = substr(arr[3], 1, 2) n = split(substr(arr[3], 4), brr, ":") hour = brr[1] minute = brr[2] sec = substr(brr[3], 1, 2) # print "debug", year, month, day, hour, minute, sec, $5 timestring = sprintf("%s %2d %2d %2d %2d %2d", year, month, day, hour, minute, sec) if ($5 == "NREQ") { print mktime(timestring), $6, $8, $10 } else { print mktime(timestring), 0, 0, 0 } }' |\ analyze