====== termuser ====== ^ Author | [[ gjohnson@trantor.org | Galen Johnson ]] | ^ Compatibility | Xymon 4.2 | ^ Requirements | Perl, Windows | ^ Download | None | ^ Last Update | 2007-06-30 | ===== Description ===== termusers.pl is an external script that is run by the Big Brother client on a Windows Terminal Servers. It counts the number of users and determines how many are active or disconnected users. It can be used to track multiple customers on a shared terminal server with minor modification. ===== Installation ===== === Client side === - Add to BBWin.cfg in externals This may work as well === Server side === - Add 'termusers=ncv' to TEST2RRD in hobbitserver.cfg - Add NCV_termusers="ActiveSessions:GAUGE,DisconnectedSessions:GAUGE,*:NONE" to hobbitserver.cfg. - Add 'termusers' to the GRAPHS definitions in hobbitserver.cfg. - Update hobbitgraph.cfg with: [termusers] TITLE Terminal Server Users YAXIS # DEF:active=termusers.rrd:ActiveSessions:AVERAGE DEF:disc=termusers.rrd:DisconnectedSessions:AVERAGE LINE1:active#00CCCC:Active Users LINE2:disc#FF0000:Disconnected Users COMMENT:\n GPRINT:active:LAST:Active Users \: %5.1lf%s (cur) GPRINT:active:MAX: \: %5.1lf%s (max) GPRINT:active:MIN: \: %5.1lf%s (min) GPRINT:active:AVERAGE: \: %5.1lf%s (avg)\n GPRINT:disc:LAST:Disconnected Users \: %5.1lf%s (cur) GPRINT:disc:MAX: \: %5.1lf%s (max) GPRINT:disc:MIN: \: %5.1lf%s (min) GPRINT:disc:AVERAGE: \: %5.1lf%s (avg)\n ===== Source ===== ==== termusers.pl ==== ######################################################################## # Name: termusers.pl # Version: 1.0 # Author: Brandon Kitchen # Purpose: termusers.pl is an external script that is run by the Big # Brother client on a Windows Terminal Servers. It counts # the number of users and determines how many are active # and disconnected users. # # Changelog: # 10-13-2006: Updated to work with Xymon (GMJ) # Removed laard-grapher.cgi links ######################################################################## use strict; use Sys::Hostname; # Constants use constant RED_ALERT => 45; use constant YELLOW_ALERT => 25; use constant DEBUG => 0; # Globals use vars qw($total_users); use vars qw($active_users $disc_users); use vars qw($computer $service $line $userattr $bblogs); use vars qw(@userinfo @query); # This is the name of the column in the BB display. $service = "termusers"; $bblogs = "c:\\Program Files\\BBWin\\tmp"; # Get the local system name. $computer = hostname(); # Setup where output goes. if ( DEBUG ) { open(STATUS, ">$service") || die "$!: file $service"; } else { open(STATUS, ">$bblogs\\$service") || die "$!: file $bblogs\\$service"; } # Get the list of terminal users. @query = `query user`; # Setup the counters. $total_users = 0; $active_users = 0; $disc_users = 0; # Go through the list of users looking for different types (ie group1 vs group2) for $line (@query) { # Discard the header line. next if $line =~ /USERNAME|^\s*$/; $total_users++; print "Total: $total_users\n" if DEBUG; # Get rid of whitespace at the start of the line. Also fix # the special case user (console) that starts with <. if ( $line =~ /^\s+/ ) { $line =~ s/^\s+//g; } if ( $line =~ /^\>/ ) { $line =~ s/^\>//g; } # Split the line into tokens and start counting special users. @userinfo = split /\s+/, $line; if ($line =~ /Active/) { $active_users++; } elsif ($line =~ /Disc/) { $disc_users++; } } # Check the total_users count and alert as appropriate. Also alert red if # any users in the Revoked OU have sessions on the system. if ($total_users <= YELLOW_ALERT) { print STATUS "green\n"; } elsif ($total_users <= RED_ALERT) { print STATUS "yellow\n"; } else { print STATUS "red\n"; } print STATUS qq/There are $total_users terminal users on $computer.\n Of the $total_users total users:\n \t Active Sessions:\t$active_users \tDisconnected Sessions:\t$disc_users /; # Send the list of users. print STATUS "\n\n@query\n"; # All done now. close(STATUS); ===== Known Bugs and Issues ===== * No known bugs. ===== To Do ===== * Provide instructions for tracking disparate customers. ===== Credits ===== * Brandon Kitchen - I took it over because I know he isn't going to want to support it. ===== Changelog ===== * **2007-06-30** * Initial release