- Repository
- Munin (2.0)
- Last change
- 2018-08-17
- Family
- manual
- Capabilities
- Language
- Perl
- License
- GPL-2.0-only
ircu
Name
ircu - Plugin to graph the number of clients, channels and servers on an IRC network.
Configuration
No configuration.
Usage
This plugin connects to an IRC server running on the local host.
Author
Unknown author
License
GPLv2
Magic Markers
#%# family=manual
#%# capabilities=autoconf
#!@@PERL@@
# -*- perl -*-
=head1 NAME
ircu - Plugin to graph the number of clients, channels and servers on
an IRC network.
=head1 CONFIGURATION
No configuration.
=head1 USAGE
This plugin connects to an IRC server running on the local host.
=head1 AUTHOR
Unknown author
=head1 LICENSE
GPLv2
=head1 MAGIC MARKERS
#%# family=manual
#%# capabilities=autoconf
=cut
my $ret = undef;
if (! eval "require Net::IRC;")
{
$ret = "Net::IRC not found";
}
if ($ARGV[0] and $ARGV[0] eq "autoconf")
{
if ($ret)
{
print "no ($ret)\n";
exit 0;
}
my $irc = new Net::IRC;
my $conn;
$irc = new Net::IRC; $conn = $irc->newconn(Nick => 'munin-ircd', Server => 'localhost');
if (!$conn)
{
print "no (Couldn't connect to IRC server)\n";
exit 0;
}
print "yes\n";
exit 0;
}
if($ARGV[0] and $ARGV[0] eq "config") {
print "host_name $ENV{FQDN}\n";
print "graph_title ircd status\n";
print "graph_order clients channels servers\n";
print "graph_args -l 0\n";
print "clients.label clients\n";
print "clients.draw LINE2\n";
print "channels.label channels\n";
print "channels.draw LINE2\n";
print "servers.label servers\n";
print "servers.draw LINE2\n";
exit 0;
}
my $irc = new Net::IRC;
my $conn = $irc->newconn(Nick => 'munin-ircd',
Server => 'localhost');
my %result;
#$conn->debug(0);
sub luserclient {
my($self, $event) = @_;
# Do we have something like an UnrealIRCD?
if(($event->args)[1] =~ /There are (\d+) users and (\d+) invisible on (\d+) servers/) {
$result{'clients'} = $1 + $2 - 1; # don't count this script
$result{'servers'} = $3;
}
# Or maybe some freendode hyperion stuff?
elsif(($event->args)[1] =~ /There are (\d+) listed and (\d+) unlisted users on (\d+) servers/) {
$result{'clients'} = $1 + $2 - 1; # don't count this script
$result{'servers'} = $3;
}
# Or some recent ircnet ircd?
elsif(($event->args)[1] =~ /There are (\d+) users and \d+ services on (\d+) servers/) {
$result{'clients'} = $1 - 1; # don't count this script
$result{'servers'} = $2;
}
# Anything else goes here
elsif(($event->args)[1] =~ /There are (\d+) users and (\d+) invisible/) {
$result{'clients'} = $1 + $2 - 1; # don't count this script
}
# And here (if there are no invisible count)
elsif(($event->args)[1] =~ /There are (\d+) users/) {
$result{'clients'} = $1 - 1; # don't count this script
}
}
sub luserchannels {
my($self, $event) = @_;
if(($event->args)[1] =~ /^(\d+)/) {
$result{'channels'} = $1;
}
}
sub quit {
my($self, $event) = @_;
open(STDERR, ">/dev/null");
$self->quit();
print "clients.value " . $result{'clients'} . "\n";
print "channels.value " . $result{'channels'} . "\n";
print "servers.value " . $result{'servers'} . "\n";
}
$conn->add_global_handler('endofmotd', \&quit);
$conn->add_global_handler('luserclient', \&luserclient);
$conn->add_global_handler('luserchannels', \&luserchannels);
while(1) {
$irc->do_one_loop();
}
# vim:syntax=perl