|
Packit |
667938 |
#!/usr/bin/perl
|
|
Packit |
667938 |
# ircstats2.pl v1.3 06 Apr 2001 Lucas Nussbaum <lucas@schickler.net>
|
|
Packit |
667938 |
# More info can be found on http://www.schickler.net/lucas/ircstats2.php
|
|
Packit |
667938 |
# based on ircstats from Matt Ramsey (MR227) mjr@geeks.org, mjr@nin.com
|
|
Packit |
667938 |
# Used to generate stats on the Kewl.Org IRC Network
|
|
Packit |
667938 |
# If you see something that should be changed, please notify me !
|
|
Packit |
667938 |
|
|
Packit |
667938 |
use Socket;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# pseudo-client parameters
|
|
Packit |
667938 |
$nick = "StatsMaker234";
|
|
Packit |
667938 |
$ident = "Stats";
|
|
Packit |
667938 |
$realname = "http://www.schickler.net/lucas/";
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# server and port to connect to
|
|
Packit |
667938 |
$ircserver = "127.0.0.1";
|
|
Packit |
667938 |
$ircport = "6667";
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# Where to store the output data (directory MUST exist)
|
|
Packit |
667938 |
# The number of users on each server will be in a file named like the server.
|
|
Packit |
667938 |
# An additionnal file named 'global' will be created, containing the sum of
|
|
Packit |
667938 |
# all servers' users.
|
|
Packit |
667938 |
# An example configuration file is included.
|
|
Packit |
667938 |
$datapath = "/home/lucas/ircstats2/temp";
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# Where to put the PID file
|
|
Packit |
667938 |
$pidfile = "/home/lucas/ircstats2/ircstats2.pid";
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# NOTE: Set those variables to 0 to enable, put a # in front of the
|
|
Packit |
667938 |
# lines to disable.
|
|
Packit |
667938 |
# Count the global number of users in "globalusersmrtg" file (MRTG format)
|
|
Packit |
667938 |
$globalusersmrtg=0;
|
|
Packit |
667938 |
# Count the channels in "channelsmrtg" file (MRTG format)
|
|
Packit |
667938 |
$channelsmrtg=0;
|
|
Packit |
667938 |
# Count the global number of ircops in "ircopsmrtg" file (MRTG format)
|
|
Packit |
667938 |
$ircopsmrtg=0;
|
|
Packit |
667938 |
# Count the number of servers in "serversmrtg" file (MRTG format)
|
|
Packit |
667938 |
$serversmrtg=0;
|
|
Packit |
667938 |
# Count the global number of users in "globalusersplain" file
|
|
Packit |
667938 |
# (Plain text, to be used with others scripts)
|
|
Packit |
667938 |
$globalusersplain=0;
|
|
Packit |
667938 |
# Count the channels in "channelsplain" file (Plain text,
|
|
Packit |
667938 |
# to be used with others scripts)
|
|
Packit |
667938 |
$channelsplain=0;
|
|
Packit |
667938 |
# Count the global number of ircops in "ircopsplain" file
|
|
Packit |
667938 |
# (Plain text, to be used with others scripts)
|
|
Packit |
667938 |
$ircopsplain=0;
|
|
Packit |
667938 |
# Count the number of servers in "serversmrtg file (MRTG format)
|
|
Packit |
667938 |
$serversplain=0;
|
|
Packit |
667938 |
# ircops number offset (not to count services, for example)
|
|
Packit |
667938 |
$ircopsoffset=0;
|
|
Packit |
667938 |
# servers number offset (not to count services, for example)
|
|
Packit |
667938 |
$serversoffset=0;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
# Servers to poll
|
|
Packit |
667938 |
$server{"cybernet.langochat.net"}=0;
|
|
Packit |
667938 |
$server{"sicfa.langochat.net"}=0;
|
|
Packit |
667938 |
$server{"free.langochat.net"}=0;
|
|
Packit |
667938 |
$server{"jeuxgroup.langochat.net"}=0;
|
|
Packit |
667938 |
$server{"diligo.langochat.net"}=0;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
##############################################
|
|
Packit |
667938 |
### DO NOT MODIFY ANYTHING BELOW THIS LINE ###
|
|
Packit |
667938 |
##############################################
|
|
Packit |
667938 |
|
|
Packit |
667938 |
print "Now daemonizing ...\n";
|
|
Packit |
667938 |
&daemonize;
|
|
Packit |
667938 |
|
|
Packit |
667938 |
if (!(($globalusersmrtg eq "")&&($globalusersplain eq "")&&($channelsmrtg eq "")&&($channelsplain eq "")&&($ircopsmrtg eq "")&&($ircopsplain eq "")&&($serversplain eq "")&&($serversmrtg eq ""))) {
|
|
Packit |
667938 |
$needlusers=1;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
($g, $g, $proto) = getprotobyname("tcp");
|
|
Packit |
667938 |
while (true) {
|
|
Packit |
667938 |
($g, $g, $g, $g, $rawserver) = gethostbyname($ircserver);
|
|
Packit |
667938 |
if ($rawserver) {
|
|
Packit |
667938 |
$serveraddr = pack("Sna4x8", 2, $ircport, $rawserver);
|
|
Packit |
667938 |
socket(SOCKET, AF_INET, SOCK_STREAM, $proto) || die "No socket: $!";
|
|
Packit |
667938 |
if (connect(SOCKET, $serveraddr)){
|
|
Packit |
667938 |
select(SOCKET); $| = 1;
|
|
Packit |
667938 |
select(STDOUT); $| = 1;
|
|
Packit |
667938 |
print SOCKET "USER $ident a b :$realname\n";
|
|
Packit |
667938 |
print SOCKET "NICK $nick\n";
|
|
Packit |
667938 |
while (<SOCKET>){
|
|
Packit |
667938 |
@i = split(" ",$_);
|
|
Packit |
667938 |
if ($i[1] eq "433") {print SOCKET "NICK ".$nick.time()."\n";}
|
|
Packit |
667938 |
elsif ($i[1] eq "437") {print SOCKET "NICK ".$nick.time()."\n";}
|
|
Packit |
667938 |
elsif ($i[1] eq "376") {&getinfo;}
|
|
Packit |
667938 |
elsif ($i[1] eq "402") {$server{lc($i[3])}=0;}
|
|
Packit |
667938 |
elsif ($i[1] eq "265") {
|
|
Packit |
667938 |
$i[0]=~s/\://;
|
|
Packit |
667938 |
$server{lc($i[0])}=$i[6];
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
elsif ($i[1] eq "266") {
|
|
Packit |
667938 |
if ($globalusersmrtg ne "") {
|
|
Packit |
667938 |
$globalusersmrtg=$i[6];
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($globalusersplain ne "") {
|
|
Packit |
667938 |
$globalusersplain=$i[6];
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
elsif ($i[1] eq "254") {
|
|
Packit |
667938 |
if ($channelsmrtg ne "") {
|
|
Packit |
667938 |
$channelsmrtg=$i[3];
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($channelsplain ne "") {
|
|
Packit |
667938 |
$channelsplain=$i[3];
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
elsif ($i[1] eq "251") {
|
|
Packit |
667938 |
if ($serversmrtg ne "") {
|
|
Packit |
667938 |
$serversmrtg=$i[11]-$serversoffset;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($serversplain ne "") {
|
|
Packit |
667938 |
$serversplain=$i[11]-$serversoffset;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
elsif ($i[1] eq "252") {
|
|
Packit |
667938 |
if ($ircopsmrtg ne "") {
|
|
Packit |
667938 |
$ircopsmrtg=$i[3]-$ircopsoffset;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($ircopsplain ne "") {
|
|
Packit |
667938 |
$ircopsplain=$i[3]-$ircopsoffset;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
elsif ($i[0] eq "PING") {
|
|
Packit |
667938 |
&saveinfo;
|
|
Packit |
667938 |
print SOCKET "PONG $i[1]\n";
|
|
Packit |
667938 |
&getinfo;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
close(SOCKET);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
sleep(120);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub saveinfo {
|
|
Packit |
667938 |
foreach $s (keys %server){
|
|
Packit |
667938 |
open(OUTPUT,">$datapath/$s");
|
|
Packit |
667938 |
print OUTPUT "$server{$s}\n$server{$s}\n$time\n";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($globalusersmrtg ne "") {
|
|
Packit |
667938 |
open(OUTPUT, ">$datapath/globalusersmrtg");
|
|
Packit |
667938 |
print OUTPUT "$globalusersmrtg\n$globalusersmrtg\n$time\n";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($channelsmrtg ne "") {
|
|
Packit |
667938 |
open(OUTPUT, ">$datapath/channelsmrtg");
|
|
Packit |
667938 |
print OUTPUT "$channelsmrtg\n$channelsmrtg\n$time\n";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($serversmrtg ne "") {
|
|
Packit |
667938 |
open(OUTPUT, ">$datapath/serversmrtg");
|
|
Packit |
667938 |
print OUTPUT "$serversmrtg\n$serversmrtg\n$time\n";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($ircopsmrtg ne "") {
|
|
Packit |
667938 |
open(OUTPUT, ">$datapath/ircopsmrtg");
|
|
Packit |
667938 |
print OUTPUT "$ircopsmrtg\n$ircopsmrtg\n$time\n";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
$ircopsmrtg=0; # raw 252 pas disp si pas opers
|
|
Packit |
667938 |
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($globalusersplain ne "") {
|
|
Packit |
667938 |
open(OUTPUT,">$datapath/globalusersplain");
|
|
Packit |
667938 |
print OUTPUT "$globalusersplain";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($channelsplain ne "") {
|
|
Packit |
667938 |
open(OUTPUT, ">$datapath/channelsplain");
|
|
Packit |
667938 |
print OUTPUT "$channelsplain";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($serversplain ne "") {
|
|
Packit |
667938 |
open(OUTPUT, ">$datapath/serversplain");
|
|
Packit |
667938 |
print OUTPUT "$serversplain";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
if ($ircopsplain ne "") {
|
|
Packit |
667938 |
open(OUTPUT, ">$datapath/ircopsplain");
|
|
Packit |
667938 |
print OUTPUT "$ircopsplain";
|
|
Packit |
667938 |
close(OUTPUT);
|
|
Packit |
667938 |
$ircopsplain=0; # raw 252 pas disp si pas opers
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub getinfo {
|
|
Packit |
667938 |
foreach $s (keys %server) {
|
|
Packit |
667938 |
print SOCKET "lusers * $s\n";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
$time=time();
|
|
Packit |
667938 |
if ($needlusers==1) {
|
|
Packit |
667938 |
print SOCKET "lusers\n";
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
|
|
Packit |
667938 |
sub daemonize () {
|
|
Packit |
667938 |
chdir "/" or die "Can't chdir to /: $!";
|
|
Packit |
667938 |
open STDIN, "/dev/null" or die "Can't read /dev/null: $!";
|
|
Packit |
667938 |
open STDOUT, ">/dev/null" or die "Can't write to /dev/null: $!";
|
|
Packit |
667938 |
defined (my $pid = fork) or die "Can't fork: $!";
|
|
Packit |
667938 |
if ($pid) {
|
|
Packit |
667938 |
if ($pidfile) {
|
|
Packit |
667938 |
open(PIDFILE,">$pidfile");
|
|
Packit |
667938 |
print PIDFILE "$pid\n";
|
|
Packit |
667938 |
close(PIDFILE);
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
exit;
|
|
Packit |
667938 |
}
|
|
Packit |
667938 |
setsid or die "Can't start a new session: $!";
|
|
Packit |
667938 |
open STDERR, ">&STDOUT" or die "Can't dup stdout: $!";
|
|
Packit |
667938 |
}
|