diff options
-rw-r--r-- | rcynic/show.awk | 75 | ||||
-rw-r--r-- | rcynic/show.xsl | 55 |
2 files changed, 130 insertions, 0 deletions
diff --git a/rcynic/show.awk b/rcynic/show.awk new file mode 100644 index 00000000..b533ac9d --- /dev/null +++ b/rcynic/show.awk @@ -0,0 +1,75 @@ +# $Id$ +# +# Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC") +# +# Permission to use, copy, modify, and/or distribute this software for any +# purpose with or without fee is hereby granted, provided that the above +# copyright notice and this permission notice appear in all copies. +# +# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH +# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, +# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE +# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +# PERFORMANCE OF THIS SOFTWARE. + +# Prettyprint tab-delimited rcynic summary data. This is intended as +a postprocessor for show.xsl. + +BEGIN { + FS = "\t"; +} + +NR == 1 { + nf = NF; + for (i = 1; i <= nf; i++) { + split($i, h, /[ \t]+/); + for (j = 1; j <= length(h); j++) { + head[i, j] = h[j]; + if (length(h[j]) > width[i]) + width[i] = length(h[j]); + } + } +} + +NR > 1 { + nr = NR - 1; + for (j = 1; j <= NF; j++) { + data[nr, j] = $j; + sum[j] += $j; + if (length($j) > width[j]) + width[j] = length($j); + } +} + +END { + for (i = 1;; i++) { + blank = 1; + for (j = 2; j <= nf; j++) + if (head[j, i] && sum[j] > 0) + blank = 0; + if (blank) + break; + for (j = 1; j <= nf; j++) + if (j == 1) + printf "%*s", width[j], head[j, i]; + else if (sum[j] > 0) + printf " %*s", width[j], head[j, i]; + print ""; + } + for (i = 1; i <= nr; i++) { + for (j = 1; j <= nf; j++) + if (j == 1) + printf "%*s", width[j], data[i, j]; + else if (sum[j] > 0) + printf " %*s", width[j], data[i, j]; + print ""; + } + for (j = 1; j <= nf; j++) + if (j == 1) + printf "%*s", width[j], "Total"; + else if (sum[j] > 0) + printf " %*s", width[j], sum[j]; + print ""; +} diff --git a/rcynic/show.xsl b/rcynic/show.xsl new file mode 100644 index 00000000..c6362f78 --- /dev/null +++ b/rcynic/show.xsl @@ -0,0 +1,55 @@ +<?xml version="1.0"?> +<!-- + - Copyright (C) 2010 Internet Systems Consortium, Inc. ("ISC") + - + - Permission to use, copy, modify, and/or distribute this software for any + - purpose with or without fee is hereby granted, provided that the above + - copyright notice and this permission notice appear in all copies. + - + - THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH + - REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + - AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, + - INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + - LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE + - OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + - PERFORMANCE OF THIS SOFTWARE. + --> + +<!-- $Id$ --> + +<!-- + - XSL stylesheet to render rcynic's xml-summary output as tab-delimited text. + --> + +<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> + + <xsl:output method="text" encoding="US-ASCII"/> + + <xsl:template match="/"> + <xsl:for-each select="rcynic-summary/labels/*"> + <xsl:if test="position() != 1"> + <xsl:text>	</xsl:text> + </xsl:if> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:text> </xsl:text> + <xsl:for-each select="rcynic-summary/host"> + <xsl:sort order="descending" data-type="number" select="sum(*[not(self::hostname)])"/> + <xsl:sort order="ascending" data-type="text" select="hostname"/> + <xsl:for-each select="*"> + <xsl:if test="position() != 1"> + <xsl:text>	</xsl:text> + </xsl:if> + <xsl:apply-templates/> + </xsl:for-each> + <xsl:text> </xsl:text> + </xsl:for-each> + </xsl:template> + +</xsl:stylesheet> + +<!-- + - Local variables: + - mode: sgml + - End: + --> |