Repository
Munin (master)
Last change
2018-05-21
Graph Categories
Family
auto
Capabilities
Language
Perl
License
GPL-2.0-only
Authors

users

Name

users - Munin plugin to monitor the number of users logged in to a Unix box.

Applicable Systems

Should work on any Unix that has the who(1) command.

Configuration

None needed

Interpretation

The plugin simply runs the who(1) command and counts the number of users logged in by different methods (tty, pty, X, etc).

Bugs

Logins or sessions that are not registered in /var/run/utmp as part of the session setup will not be counted (this is a feature, not a bug).

Only tested extensively on Linux.

Magic Markers

#%# family=auto
#%# capabilities=autoconf

Author

Copyright (C) 2006-2008 Nicolai Langfeldt
Copyright (C) 2004 Michael Kaiser

License

GPLv2

#!/usr/bin/perl -w

use strict;
use warnings;

=head1 NAME

users - Munin plugin to monitor the number of users logged in to a Unix box.

=head1 APPLICABLE SYSTEMS

Should work on any Unix that has the L<who>(1) command.

=head1 CONFIGURATION

None needed

=head1 INTERPRETATION

The plugin simply runs the L<who>(1) command and counts the number of
users logged in by different methods (tty, pty, X, etc).

=head1 BUGS

Logins or sessions that are not registered in C</var/run/utmp> as part
of the session setup will not be counted (this is a feature, not a
bug).

Only tested extensively on Linux.

=head1 MAGIC MARKERS

  #%# family=auto
  #%# capabilities=autoconf

=head1 AUTHOR

  Copyright (C) 2006-2008 Nicolai Langfeldt
  Copyright (C) 2004 Michael Kaiser

=head1 LICENSE

GPLv2

=cut

use Munin::Plugin;

if ( defined($ARGV[0])) {
    if ($ARGV[0] eq 'autoconf') {
	print "yes\n";
	exit 0;
    }

    if ( $ARGV[0] eq "config" ) {
	print "graph_title Logged in users\n";
	print "graph_args --base 1000 -l 0\n";
	print "graph_vlabel Users\n";
	print "graph_scale no\n";
	print "graph_category system\n";
	print "graph_printf %3.0lf\n";
	print "tty.label tty\n";
	print "tty.draw AREASTACK\n";
	print "tty.colour 00FF00\n";
	print "pty.label pty\n";
	print "pty.draw AREASTACK\n";
        print "pty.colour 0000FF\n";
	print "pts.label pts\n";
	print "pts.draw AREASTACK\n";
	print "pts.colour 00FFFF\n";
	print "X.label X displays\n";
	print "X.draw AREASTACK\n";
	print "X.info Users logged in on an X display\n";
	print "X.colour 000000\n";
	print "other.label Other users\n";
	print "other.info Users logged in by indeterminate method\n";
	print "other.colour FF0000\n";
	foreach my $field (qw(tty pty pts X other)) {
		print_thresholds($field);
	}
	exit 0;
    }
}

my $tty = 0;
my $pty = 0;
my $pts = 0;
my $X   = 0;
my $unc = 0;  # Unclassified

open (WHO,"who |");

foreach (<WHO>) {
    (undef,$_,undef) = split /[\/ ]+/;
    $tty++,next if /ttyv?/; # Linux virtual console tty (on some hosts)
    $pty++,next if /pty|ttyp/;
    $pts++,next if /pts/;
    $tty++,next if /tty/;   # Regular tty

    $X++,next if (/:\d+/); # Linux style X screen
    $X++,next if (/X[0-9a-fA-F]*/); # Solaris style (ifi.uio.no only?)

    $unc++;
}

close (WHO);

print "tty.value $tty\n";
print "pty.value $pty\n";
print "pts.value $pts\n";
print "X.value $X\n";
print "other.value $unc\n";