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