| |
— | 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 |