#!/usr/bin/perl -w ########################################################################### use vars qw($user $personal_key); require $ENV{HOME}.'/.jaiku.cf'; die q{ usage: jaiku-monitor-http ( --test | channel http://site.url/ ) Also needs a ~/.jaiku.cf like this: $user='jmason'; $personal_key='dfg98df9g8df9g89df'; } unless ($ARGV[1] && $ARGV[0] && $user && $personal_key); ########################################################################### use LWP::UserAgent; use LWP::Simple; use HTTP::Request::Common qw(POST); use URI::Escape; use strict; use bytes; my $debug = 0; if ($ARGV[0] eq '--test') { send_message("testing"); exit; } my $chan = $ARGV[0]; my $url = $ARGV[1]; my $msg = check_url($url); if ($msg) { send_message("#".$chan.": ".$msg); } exit; sub dbg { $debug and print "dbg: ".$_[0]."\n"; } sub check_url { my $url = shift; for my $retries (1 .. 5) { if (head($url)) { dbg "HEAD $url is fine"; return; # all fine } dbg "HEAD $url failed; retrying ($retries)"; ($retries < 5) and sleep 10; # and retry } return 'HEAD '.$url.' failed to respond with 200 status'; } sub send_message { my $msg = shift; my $ua = LWP::UserAgent->new; for my $retries (1 .. 3) { my $req = POST 'http://api.jaiku.com/json', [ user => $user, personal_key => $personal_key, method => 'presence.send', message => $msg ]; my $resp = $ua->request($req)->as_string; if ($resp =~ /"status"\s*:\s*"ok"/) { dbg "POST to jaiku of '$msg' is ok"; return 1; } warn "POST failed, no 'status':'ok' JSON, retrying: $resp"; } warn "POST failed too many times, giving up on '$msg'"; return 0; }