| |
| — | addons:column_overview [2012/04/12 08:45] (current) – created - external edit 127.0.0.1 |
|---|
| | ====== Column Overview ====== |
| |
| | ^ Author | [[ gudm00@gmail.com | Gudmundur Ingvarsson ]] | |
| | ^ Compatibility | Xymon 4.2+ | |
| | ^ Requirements | Perl | |
| | ^ Download | http://sourceforge.net/projects/xymonesxi/files/redboard-imagepack.tar.gz/download | |
| | ^ Last Update | 2012-04-11 | |
| | ===== Description ===== |
| | When you click on a column header link you get a overview page for that test that displays the status of all hosts using the given test. |
| | ===== Installation ===== |
| | Find a this line in your hobbitserver.cfg and change it to this COLUMNDOCURL="$CGIBINURL/hobbitcolumn.sh?%s" # URL formatting string for column-links |
| | |
| | |
| | hobbitcolumn.sh goes under the base cgi-bin directory |
| | |
| | bb-csvinfo.cgi goes under the web cgi-bin directory |
| | |
| | dashboard_header goes under the server/web directory with the rest of the headers. |
| | |
| | |
| | Enjoy! |
| | ===== Source ===== |
| | ==== hobbitcolumn.sh ==== |
| | |
| | <hidden onHidden="Show Code ?" onVisible="Hide Code ?"> |
| | <code> |
| | #!/bin/sh |
| | |
| | QS="${QUERY_STRING}" |
| | QUERY_STRING="db=columndoc.csv&key=${QS}&nongreen=all" |
| | export QUERY_STRING |
| | |
| | . /usr/local/xymon/server/etc/hobbitcgi.cfg |
| | |
| | exec /usr/local/xymon/server/bin/bb-csvinfo.cgi $CGI_HOBBITCOLUMN_OPTS |
| | |
| | </code> |
| | </hidden> |
| | |
| | ==== bb-csvinfo.cgi ==== |
| | |
| | <hidden onHidden="Show Code ?" onVisible="Hide Code ?"> |
| | <code> |
| | |
| | #!/usr/local/bin/perl |
| | |
| | # Written by Gudmundur Orn Ingvarsson |
| | # Last update: May 31st 2011 |
| | # Please contact me at: gudm00@gmail.com for questions or comments |
| | |
| | #use strict; |
| | use warnings; |
| | use diagnostics; |
| | use CGI qw(:standard); |
| | use CGI::Carp qw(fatalsToBrowser); |
| | use Math::Complex; |
| | |
| | # Basic Config Variables |
| | $version = "0.1"; |
| | |
| | my $bb_home = "/usr/local/xymon"; |
| | my $bb_header = "$bb_home/server/web/dashboard_header"; # Change this if needed. |
| | my $bb_footer = "$bb_home/server/web/edit_footer"; # Change this if needed. |
| | my $bb_web = "/"; |
| | my $bb_gifs = "/gifs"; |
| | my $hobbitcfg="/usr/local/xymon/server/etc/hobbitserver.cfg"; |
| | my $hobbitdrel = `$bb_home/server/bin/bb --version | awk '{print \$3}'`; |
| | my $BBMENUSKIN = "/menu"; |
| | $i = 0; |
| | $greencount = 0; |
| | $redcount = 0; |
| | $bluecount = 0; |
| | $yellowcount = 0; |
| | $clearcount = 0; |
| | $unknowncount = 0; |
| | $purplecount = 0; |
| | |
| | $incoming = $ENV{"QUERY_STRING"}; |
| | ($arg1,$arg2,$arg3,$arg4) = split(/\&/, $incoming); |
| | ($db,$dbvalue) = split(/\=/, $arg1); |
| | ($testkey,$test) = split(/\=/, $arg2); |
| | ($non,$green) = split(/\=/, $arg3); |
| | |
| | $date = localtime; |
| | |
| | sub print_error() { |
| | my $error_msg = shift; |
| | my $color = shift || 'clear'; |
| | $error = 1; |
| | print "<CENTER><B><IMG SRC=\"$bb_gifs/${color}.gif\">$error_msg</FONT></B></CENTER><P>"; |
| | } |
| | |
| | sub header () { |
| | # Basic HTML Code at the top |
| | print "Content-type: text/html\n\n"; |
| | my $color = "black"; |
| | open (HEAD, "<$bb_header") or &print_error("I can't open $bb_header for reading!"); |
| | while (<HEAD>) { |
| | if (/META/i && /HTTP-EQUIV/i && /REFRESH/i && /CONTENT/i) { s/<(.*?)>/<!-- Refresh removed -->/g; } |
| | s/&HOBBITLOGO/$ENV{'HOBBITLOGO'}/g; |
| | s/&BBBACKGROUND/$color/g; |
| | s/&BBMENUSKIN/$BBMENUSKIN/g; |
| | s/&BBPAGEPATH/$ENV{'BBPAGEPATH'}/g; |
| | s/&BBSKIN/$ENV{'BBSKIN'}/g; |
| | s/&BBDATE/$date/g; |
| | print "<!-- $ENV{'BBDATE'}; -->"; |
| | s/\'//g; |
| | print; |
| | } |
| | close HEAD; |
| | print "<TABLE ALIGN=CENTER BORDER=0>"; |
| | if ($green eq "nongreen") { print "<TR><TD ALIGN=CENTER COLSPAN=20><A CLASS=WHITE HREF=\"/xymon-cgi/hobbitcolumn.sh?$test&nongreen=all\">Full Host Page</A></TD></TR><TR>"; } |
| | else { print "<TR><TD ALIGN=CENTER COLSPAN=20><A CLASS=WHITE HREF=\"/xymon-cgi/hobbitcolumn.sh?$test&nongreen=nongreen\">Non-Green Page</A></TD></TR><TR>"; } |
| | } |
| | |
| | sub footer () { |
| | |
| | # Close the HTML Page |
| | print "</TD></TABLE>"; |
| | open (FOOT, "<$bb_footer") or &print_error("I can't open $bb_footer for reading!"); |
| | while (<FOOT>) { |
| | s/&BBMENUSKIN/$BBMENUSKIN/g; |
| | s/&HOBBITDREL/$hobbitdrel/g; |
| | print; |
| | } |
| | close FOOT; |
| | } |
| | |
| | sub sdd() { |
| | # Fetch latest Service Statistics |
| | @sddstatus = `/usr/local/xymon/server/bin/bb localhost \"hobbitdboard test=$test\"`; |
| | foreach $sddstatus (@sddstatus) { |
| | ($host,$test,$color) = split("\\|", $sddstatus); |
| | $hostname = $host; |
| | if ($color eq "green") { $image = "$bb_gifs/green-recent.gif"; $linkcolor=""; $greencount = $greencount +1; } |
| | elsif ($color eq "red") { $image = "$bb_gifs/red-recent.gif"; $linkcolor=""; $redcount = $redcount +1; } |
| | elsif ($color eq "blue") { $image = "$bb_gifs/blue-recent.gif"; $linkcolor=""; $bluecount = $bluecount +1; } |
| | elsif ($color eq "clear") { $image = "$bb_gifs/clear-recent.gif"; $linkcolor="CLASS=white"; $color="none"; $clearcount = $clearcount +1;} |
| | elsif ($color eq "purple") { $image = "$bb_gifs/purple-recent.gif"; $linkcolor=""; $purplecount = $purplecount +1; } |
| | elsif ($color eq "unknown") { $image = "$bb_gifs/unknown-recent.gif"; $linkcolor=""; $unknowncount = $unknowncount +1; } |
| | elsif ($color eq "yellow") { $image = "$bb_gifs/yellow-recent.gif"; $linkcolor=""; $yellowcount = $yellowcount +1; } |
| | unless(($green eq "nongreen")&&($color eq "green")) { |
| | push @statusline, "<TD CLASS=$color><A $linkcolor HREF=http://hobbit/xymon-cgi/bb-hostsvc.sh?HOST=".$host."&SERVICE=$test>$hostname<IMG BORDER=0 SRC=".$image."></A></TD>"; |
| | # if ($i > $columns) { push @statusline, "</TR><TR>"; $i = 0; } else { $i++; } |
| | } |
| | } |
| | } |
| | |
| | header(); |
| | print "<TD ALIGN=CENTER COLSPAN=20><H2>$test</H2></TD></TR><TR>"; |
| | sdd(); |
| | $totalcount = $greencount+$redcount+$bluecount+$clearcount+$purplecount+$unknowncount+$yellowcount; |
| | if ($green eq "nongreen") { $totalcount = $totalcount - $greencount; $greencount = 0;} |
| | if ($totalcount < 10) { $columns = 2; } |
| | elsif ($totalcount < 31) { $columns = 3; } |
| | elsif ($totalcount < 81) { $columns = 4; } |
| | elsif ($totalcount < 125) { $columns = 5; } |
| | elsif ($totalcount > 124) { $columns = 6; } |
| | print "<TD ALIGN=CENTER COLSPAN=20>Total: $totalcount <IMG SRC=\"$bb_gifs/green-recent.gif\"> $greencount <IMG SRC=\"$bb_gifs/red-recent.gif\"> $redcount <IMG SRC=\"$bb_gifs/yellow-recent.gif\"> $yellowcount <IMG SRC=\"$bb_gifs/purple-recent.gif\"> $purplecount <IMG SRC=\"$bb_gifs/blue-recent.gif\"> $bluecount <IMG SRC=\"$bb_gifs/clear-recent.gif\"> $clearcount <IMG SRC=\"$bb_gifs/unknown-recent.gif\"> $unknowncount</TD></TR><TR>"; |
| | foreach $line (@statusline) { |
| | if ($i > $columns) { print "$line</TR><TR>"; $i = 0; } else { print $line; $i++; } |
| | } |
| | print "</TABLE>"; |
| | footer(); |
| | |
| | </code> |
| | </hidden> |
| | |
| | ==== dashboard_header ==== |
| | |
| | <hidden onHidden="Show Code ?" onVisible="Hide Code ?"> |
| | <code> |
| | |
| | |
| | <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> |
| | <HTML> |
| | <HEAD> |
| | <META HTTP-EQUIV="REFRESH" CONTENT="60"> |
| | <META HTTP-EQUIV="EXPIRES" CONTENT="Sat, 01 Jan 2001 00:00:00 GMT"> |
| | <META HTTP-EQUIV="Set-Cookie" CONTENT="pagepath=&BBPAGEPATH; path=/"> |
| | <META HTTP-EQUIV="Set-Cookie" CONTENT="host=; path=/"> |
| | |
| | <TITLE>&BBBACKGROUND : Xymon - Status @ &BBDATE</TITLE> |
| | |
| | <!-- Styles for the menu bar --> |
| | <link rel="stylesheet" type="text/css" href="&BBMENUSKIN/menu.css"> |
| | <STYLE type=\"text/css\"> |
| | body {font-family: Century Gothic, Verdana, Arial, SunSans-Regular, Sans-Serif;background-color: #000000;color:#FFFFFF;padding:0px;margin:0px;text-align: center;white-space: nowrap;vertical-align: center;} |
| | .table{background-color: #007BFF;color:#FFFFFF;font-family: Century Gothic,Verdana;font-size: 12pt;border-collapse: collapse;border-style: solid;border-width: 1px;margin-top: 0px;text-align: center;white-space: nowrap;position:absolute;} |
| | th{background-image: url(/img/bgHeaderS.png);background-repeat: repeat-x;background-color: #000000;white-space: nowrap;text-align: center;font-family: Century Gothic;color:#FFFFFF;font-size: 9pt;padding:4px;margin-left:auto;margin-right:auto;position:relative;vertical-align: center;z-index:0;} |
| | td{font-size: 9pt;vertical-align: top;z-index:0;} |
| | img{border: 0px solid;} |
| | .table_header{background-image: url(/img/bgHeaderR.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic, Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;text-align: center;padding:0px;margin:0px;margin-left:auto;margin-right:auto;margin-top: 0px;position:relative;width:100%;white-space: nowrap;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;z-index:0;} |
| | .table_footer{background-image: url(/img/bgHeaderR.png);background-repeat: repeat-x;background-color: #FFFFFF;font-family: Century Gothic, Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;text-align: center;padding:0px;margin:0px;margin-left:auto;margin-right:auto;margin-top: 0px;position:relative;width:100%;white-space: nowrap;vertical-align: center;z-index:0;} |
| | .page_header{background-image: url(/img/bgHeaderR.png);background-repeat: repeat-x;background-color: #000000;font-size: 22px ;white-space: nowrap;text-align: center;font-family: Century Gothic;color:#FFFFFF;padding:4px;margin-left:auto;margin-right:auto;margin-top: 0px;position:relative;vertical-align: center;z-index:0;} |
| | .host{background-image: url(/img/bgHeaderS.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic;color:#FFFFFF;padding:4px;text-align: center;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;} |
| | .lighter{background-repeat: repeat-x;background-color: #777777;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;text-align: center;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;z-index:0;font-family: Century Gothic,Verdana;font-size: 9pt;white-space: nowrap;} |
| | .darker{background-repeat: repeat-x;background-color: #444444;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;text-align: center;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;z-index:0;font-family: Century Gothic,Verdana;font-size: 9pt;white-space: nowrap;} |
| | .tableheader{background-color: #798BA1;font-family: Candara,Verdana;font-size: 11pt;font-style: bold;text-align: center;white-space: nowrap;vertical-align: center;} |
| | input{color: #781351;background: #fee3ad;border: 1px solid #781351} |
| | .submit input{color: #000;background: #ffa20f;border: 2px outset #d7b9c9} |
| | .green{background-image: url(/img/bgHeaderSG.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#000000;text-align: center;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;z-index:0;} |
| | .red{background-image: url(/img/bgHeaderSR.png);background-repeat: repeat-x;background-color: #000000;text-align: center;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#000000;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;} |
| | .critical{background-image: url(/img/bgHeaderSC.gif);background-repeat: repeat-x;background-color: #000000;text-align: center;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#000000;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;} |
| | .yellow{background-image: url(/img/bgHeaderSY.png);background-repeat: repeat-x;background-color: #000000;text-align: center;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#000000;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;} |
| | .purple{background-image: url(/img/bgHeaderSP.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#000000;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;text-align: center;white-space: nowrap;vertical-align: center;} |
| | .blue{background-image: url(/img/bgHeaderSB.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;text-align: center;vertical-align: center;} |
| | .none{background-image: url(/img/bgHeaderSN.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;text-align: center;padding:4px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;width: 0px;z-index:0;} |
| | .normal{background-image: url(/img/bgHeaderSN.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;text-align: left;padding:4px;margin:0px auto;margin-left:auto;margin-right:auto;vertical-align: left;width: 0px;z-index:0;} |
| | .v-ellip{text-overflow: ellipsis;-o-text-overflow: ellipsis;-moz-binding: url( 'bindings.xml#ellipsis' );white-space: nowrap;overflow: hidden;display: inline-block;max-width: 400px;text-align: left;line-height: .01em;} |
| | p {text-align: left;margin: .2em;line-height: .01em;padding: .5em;} |
| | .footer{line-height: .002em;background-image: url(/img/bgHeaderR.png);background-repeat: repeat-x;background-color: #000000;font-family: Century Gothic,Verdana, Arial, SunSans-Regular, Sans-Serif;color:#FFFFFF;text-align: center;padding:10px;margin:0px;margin-left:auto;margin-right:auto;position:relative;white-space: nowrap;vertical-align: center;z-index:0;} |
| | A:link { text-decoration: none; color: #000000; padding: 0px; } |
| | A:visited { text-decoration: none; color: #000000; padding: 0px; } |
| | A:active { text-decoration: none; color: #000000; padding: 0px; } |
| | A:hover { text-decoration: none; color: #000000; padding: 0px; } |
| | A.white:link { text-decoration: none; color: #FFFFFF; padding: 0px; border: 0px solid; } |
| | A.white:visited { text-decoration: none; color: #FFFFFF; padding: 0px; border: 0px solid;} |
| | A.white:active { text-decoration: none; color: #FFFFFF; padding: 0px; border: 0px solid;} |
| | A.white:hover { text-decoration: none; color: #FFFFFF; padding: 0px; border: 0px solid;} |
| | </STYLE> |
| | |
| | <!-- The favicon image --> |
| | <link rel="shortcut icon" href="&BBSKIN/favicon-&BBBACKGROUND.ico"> |
| | |
| | </HEAD> |
| | |
| | <BODY BGCOLOR="&BBBACKGROUND" BACKGROUND="&BBSKIN/bkg-&BBBACKGROUND.gif" TEXT="#D8D8BF" LINK="#00FFAA" VLINK="#FFFF44"> |
| | |
| | <TABLE SUMMARY="Topline" WIDTH="100%"> |
| | <TR><TD HEIGHT=16> </TD></TR> <!-- For the menu bar --> |
| | <TR> |
| | <TD VALIGN=MIDDLE ALIGN=LEFT WIDTH="30%"> |
| | <FONT FACE="Arial, Helvetica" SIZE="+1" COLOR="silver"><B>&HOBBITLOGO</B></FONT> |
| | </TD> |
| | <TD VALIGN=MIDDLE ALIGN=CENTER WIDTH="40%"> |
| | <CENTER><FONT FACE="Arial, Helvetica" SIZE="+1" COLOR="silver"><B>Dashboard</B></FONT></CENTER> |
| | </TD> |
| | <TD VALIGN=MIDDLE ALIGN=RIGHT WIDTH="30%"> |
| | <FONT FACE="Arial, Helvetica" SIZE="+1" COLOR="silver"><B>&BBDATE</B></FONT> |
| | </TD> |
| | </TR> |
| | <TR> |
| | <TD COLSPAN=3> <HR WIDTH="100%"> </TD> |
| | </TR> |
| | </TABLE> |
| | <BR> |
| | |
| | </code> |
| | </hidden> |
| | |
| | ===== Known Bugs and Issues ===== |
| | |
| | ===== To Do ===== |
| | |
| | ===== Credits ===== |
| | |
| | ===== Changelog ===== |
| | |
| | * **2012-04-11** |
| | * Initial release |