Code

perl/…/Monitorus.pm: Added Perl-based plugin to query statistics from mon.itor.us.
authorJeff Green <jeff@kikisoso.org>
Tue, 8 Dec 2009 17:28:34 +0000 (18:28 +0100)
committerFlorian Forster <octo@huhu.verplant.org>
Tue, 8 Dec 2009 17:28:34 +0000 (18:28 +0100)
bindings/perl/lib/Collectd/Plugins/Monitorus.pm [new file with mode: 0644]

diff --git a/bindings/perl/lib/Collectd/Plugins/Monitorus.pm b/bindings/perl/lib/Collectd/Plugins/Monitorus.pm
new file mode 100644 (file)
index 0000000..2493e36
--- /dev/null
@@ -0,0 +1,115 @@
+#
+# collectd - mon.itor.us collectd plugin
+# Copyright (C) 2009  Jeff Green
+#
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; only version 2 of the License is applicable.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
+#
+# Authors:
+#   Jeff Green <jeff at kikisoso.org>
+#
+
+package Collectd::Plugin::Monitorus;
+
+use strict;
+use warnings;
+
+use Collectd qw( :all );
+use LWP;
+use threads::shared;
+
+use constant NUM_OF_INTERVALS => 90;
+
+my $intervalcnt :shared;
+$intervalcnt=NUM_OF_INTERVALS;
+my $prev_value :shared;
+$prev_value=0;
+
+plugin_register (TYPE_READ, "monitorus", "monitorus_read");
+plugin_register (TYPE_LOG, "monitorus", "monitorus_log");
+
+sub monitorus_read
+{
+        my $vl = { plugin => 'monitorus' };
+
+        # Only retrieve a value occasionally in order to not overload mon.itor.us
+        if (++$intervalcnt<NUM_OF_INTERVALS) { # e.g. 180 * 10 secs / 60 seconds/min = 30 minutes
+                $vl->{'values'} = [ $prev_value ];
+                plugin_dispatch_values ('gauge', $vl);
+                return 1;
+        }
+
+        $intervalcnt=0;
+
+        my $site = 'http://mon.itor.us';
+        my $username = 'me@example.org';
+        my $target = $site.'/user/api/'.$username.'/secretpassword';
+
+        my $ua = LWP::UserAgent->new;
+        my $req = HTTP::Request->new(GET => "$target");
+        $req->header('Accept' => 'text/html');          #Accept HTML Page
+
+        my $key;
+        my $res = $ua->get($target);
+        if ($res->is_success) {# Success....all content of page has been received
+                $res->content() =~ m/\[CDATA\[(.*)\]\]/;
+                $key = $1;
+        } else {
+                INFO("monitorus: Error in retrieving login page.");
+        }
+
+        $target = $site.'/test/api/'.$key.'/testNames';
+        my $testid;
+        $res = $ua->get($target);
+        if ($res->is_success) {# Success....all content of page has been received
+                $res->content() =~ m/<test id='(.*)'><!\[CDATA\[sitetest_http\]\]/;
+                $testid = $1;
+        } else {
+                INFO("monitorus: Error in retrieving testNames page.");
+        }
+
+        #$target = $site.'/test/api/'.$key.'/testinfo/'.$testid.'/-240';
+        #$target = $site.'/test/api/'.$key.'/test/'.$testid.'/27/5/2009/1/3/-240';
+        $target = $site.'/test/api/'.$key.'/testsLastValues/1/3';
+
+        my $result;
+        my $value;
+        $res = $ua->get($target);
+        if ($res->is_success) {# Success....all content of page has been received
+                $res->content() =~ m/\<\/row\>\s*(\<row\>.*?sitetest_http.*?\<\/row\>)/s;
+                $result = $1;
+                $result =~ s/\<cell\>.*?CDATA.*?\<\/cell\>//g;
+                $result =~ m|\<cell\>([0-9]*)\<\/cell\>|;
+                $value = $1;
+        } else {
+                INFO("monitorus: Error in retrieving testsLastValues page.");
+        }
+
+        $prev_value = $value;
+        $vl->{'values'} = [ $value ];
+        plugin_dispatch_values ('gauge', $vl);
+
+        return 1;
+}
+
+# This function is called when plugin_log () has been used.
+sub monitorus_log
+{
+        my $level = shift;
+        my $msg   = shift;
+
+        print "LOG: $level - $msg\n";
+        return 1;
+} # monitorus_log ()
+
+1;