You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axkit-dev@xml.apache.org by ma...@sergeant.org on 2006/08/13 18:21:26 UTC

[SVN] [82] Stats plugin

Revision: 82
Author:   matt
Date:     2006-08-13 16:21:07 +0000 (Sun, 13 Aug 2006)

Log Message:
-----------
Stats plugin

Added Paths:
-----------
    trunk/plugins/stats

Added: trunk/plugins/stats
===================================================================
--- trunk/plugins/stats	2006-08-13 16:15:08 UTC (rev 81)
+++ trunk/plugins/stats	2006-08-13 16:21:07 UTC (rev 82)
@@ -0,0 +1,65 @@
+#!/usr/bin/perl -w
+
+use Time::HiRes qw(time);
+
+our $START_TIME = time;
+our $REQS = 0;
+our $REQS_OK = 0;
+our $ERRS = 0;
+
+sub get_stats {
+    my $class = shift;
+    my $uptime = $class->uptime;
+    my ($rate, $unit) = $class->delivery_rate;
+    return sprintf("           Uptime: %0.2f sec\n".
+                   "   Total Requests: % 10d\n".
+                   "      OK Requests: % 10d\n".
+                   "           Errors: % 10d\n".
+                   "    Delivery Rate: %0.2f reqs/%s\n\n",
+                   $uptime, $REQS, $REQS_OK, $ERRS, $rate, $unit);
+}
+
+sub hook_error {
+    my $self = shift;
+    $ERRS++;
+    return DECLINED;
+}
+
+sub hook_response_sent {
+    my $self = shift;
+    my $code = shift;
+    
+    $REQS++;
+    if ($code == 200) {
+        $REQS_OK++;
+    }
+    return DECLINED;
+}
+
+sub uptime {
+    return (time() - $START_TIME);
+}
+
+sub delivery_rate {
+    my $class = shift;
+    my $unit = 'sec';
+    my $per_sec = ($REQS / $class->uptime());
+    if ($per_sec > 1) {
+        return ($per_sec, $unit);
+    }
+    $unit = 'min';
+    my $per_min = $per_sec * 60;
+    if ($per_min > 1) {
+        return ($per_min, $unit);
+    }
+    $unit = 'hour';
+    my $per_hour = $per_min * 60;
+    if ($per_hour > 1) {
+        return ($per_hour, $unit);
+    }
+    $unit = 'day';
+    my $per_day = $per_hour * 24;
+    return ($per_day, $unit);
+}
+
+