summaryrefslogtreecommitdiffstats
path: root/scripts/hitcount.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/hitcount.pl')
-rw-r--r--scripts/hitcount.pl155
1 files changed, 155 insertions, 0 deletions
diff --git a/scripts/hitcount.pl b/scripts/hitcount.pl
new file mode 100644
index 0000000..3af36e1
--- /dev/null
+++ b/scripts/hitcount.pl
@@ -0,0 +1,155 @@
+# $Id: hitcount.pl,v 1.3.2.2 2002/03/05 18:19:28 shrike Exp shrike $
+
+use vars qw($VERSION %IRSSI);
+my @rev = split(/ /, "$Revision: 1.3.2.2 $n");
+$VERSION = "1.3";
+%IRSSI = (
+ authors => 'Riku "Shrike" Lindblad',
+ contact => 'shrike\@addiktit.net, Shrike on IRCNet/QNet/EFNet/DALNet',
+ name => 'hitcount',
+ description => 'Add a apache page hitcounter to statusbar',
+ license => 'Free',
+ changed => '$Date: 2002/03/05 18:19:28 $ ',
+ );
+
+# Changelog:
+#
+# $Log: hitcount.pl,v $
+# Revision 1.3.2.2 2002/03/05 18:19:28 shrike
+# Added use vars qw($VERSION %IRSSI);
+#
+# Revision 1.3.2.1 2002/03/05 18:04:01 shrike
+# Damnit, left default refresh to a debug value...
+#
+# Revision 1.3.1.1 2002/03/05 17:59:47 shrike
+# Forgot to turn off debugging...
+#
+# Revision 1.3 2002/03/05 17:57:04 shrike
+# Added use strict
+# .. which finally cleared up last of the bugs from the code (hopefully)
+# Next on TODO: get the item colors from theme and more configuration options.
+#
+# Revision 1.2 2002/03/05 17:27:15 shrike
+# Added standard script headers (http://juerd.nl/irssi/headers.html)
+# Removed call to Irssi::statusbars_recreate_items();
+# And a bit of polishing here and there..
+# The first two updates bug, need to fix that.
+#
+
+# To install, you also need to put
+# hitcount = { };
+# into your statusbar code in irssi config
+#
+# sets:
+# /SET hitcount_regexp - A regexp that identifies your homepage
+# /SET hitcount_refresh - Refresh rate
+# /SET hitcount_access_log - webserver access log
+
+# TODO:
+# Add ignore regexp, to prevent f.ex. css-files from increasing counter
+
+use Irssi::TextUI;
+use strict;
+
+# Debug level - higher levels print out more crap
+my $debug_level = 0;
+# current hitcount
+my ($total_hitcount, $my_hitcount) = (0);
+# change prefixes
+my ($my_prefix, $total_prefix) = ("");
+# change from last update
+my ($my_change, $total_change) = (0);
+# hitcount on last update
+my ($last_total_hitcount, $last_my_hitcount, $last_refresh) = (0);
+# set default variables
+my ($filename, $regexp, $refresh) = ("/var/log/apache/access.log", "/", 60);
+
+sub get_hitcount {
+ my $filename = Irssi::settings_get_str('hitcount_access_log');
+ my $regexp = Irssi::settings_get_str('hitcount_regexp');
+
+ Irssi::print("Finding match for \"".my $regexp."\"", MSGLEVEL_CLIENTERROR) if($debug_level > 2);
+
+ ($total_hitcount, $my_hitcount) = (0);
+
+ # Go through the access log and count matches to the given regexp
+ if(open STUFF, "$filename")
+ {
+ while (<STUFF>)
+ {
+ $total_hitcount++;
+ if(/$regexp/ois)
+ {
+ # DEBUG
+ Irssi::print("Matched $_", MSGLEVEL_CLIENTERROR) if($debug_level > 3);
+ $my_hitcount++;
+ }
+ }
+ close STUFF;
+ }
+ else
+ {
+ Irssi::print("Failed to open <$filename: $!", MSGLEVEL_CLIENTERROR);
+ }
+ return($my_hitcount,$total_hitcount);
+}
+
+sub hitcount {
+ my ($item, $get_size_only) = @_;
+
+ # DEBUG
+ Irssi::print("$get_size_only | $last_my_hitcount/$last_total_hitcount | $my_hitcount/$total_hitcount | $my_prefix$my_change $total_prefix$total_change", MSGLEVEL_CLIENTERROR) if($debug_level > 0);
+
+ my ($my_hitcount, $my_total_hitcount) = get_hitcount();
+
+ if($my_hitcount eq '') { $my_hitcount = 0; }
+
+ # Calculate change since last update
+ $my_change = $my_hitcount - $last_my_hitcount;
+ $total_change = $total_hitcount - $last_total_hitcount;
+
+ # Get correct prefix for change
+ $my_prefix = "+" if($my_change > 0);
+ $my_prefix = "-" if($my_change < 0);
+ $my_prefix = "" if($my_change == 0);
+ $total_prefix = "+" if($total_change > 0);
+ $total_prefix = "-" if($total_change < 0);
+ $total_prefix = "" if($total_change == 0);
+
+ $item->default_handler($get_size_only, undef, "$last_my_hitcount $last_total_hitcount $my_prefix$my_change $total_prefix$total_change", 1);
+
+ # last hitcount = current hitcount
+ $last_my_hitcount = $my_hitcount;
+ $last_total_hitcount = $total_hitcount;
+
+ # reset hitcounts
+ $my_hitcount = 0;
+ $total_hitcount = 0;
+ $my_total_hitcount = 0;
+}
+
+sub refresh_hitcount {
+ get_hitcount();
+ Irssi::statusbar_items_redraw('hitcount');
+}
+
+sub read_settings {
+ my $time = Irssi::settings_get_int('hitcount_refresh');
+ return if ($time == $last_refresh);
+
+ $last_refresh = $time;
+ Irssi::timeout_remove(my $refresh_tag) if (my $refresh_tag);
+ $refresh_tag = Irssi::timeout_add($time*1000, 'refresh_hitcount', undef);
+}
+
+# default values
+Irssi::settings_add_str('misc', 'hitcount_regexp', $regexp);
+Irssi::settings_add_int('misc', 'hitcount_refresh', $refresh);
+Irssi::settings_add_str('misc', 'hitcount_access_log', $filename);
+# sub to call, string on statusbar, func on statusbar
+Irssi::statusbar_item_register('hitcount', '{sb Hits: $0%K/%N$1 $2%K/%N$3}', 'hitcount');
+
+read_settings();
+Irssi::signal_add('setup changed', 'read_settings');
+
+Irssi::print("Hitcounter version ".$rev[1]." loaded");