/etc/crontab:
*/10 * * * * user /home/user/guild.pl
It has been written for btcguild.com, but can be changed easily to other pools.
Maybe this is exactly what you are looking for.
It has following dependencies:
#sudo apt-get install libjson-perl sendemail
Here it is:
# This program is free software. It comes without any warranty, to
# the extent permitted by applicable law. You can redistribute it
# and/or modify it under the terms of the Do What The Fuck You Want
# To Public License, Version 2, as published by Sam Hocevar. See
# http://sam.zoy.org/wtfpl/COPYING for more details.
# sudo aptitude install libjson-perl sendemail
use strict;
use Data::Dumper;
use JSON;
my $request = 'http://www.btcguild.com/api.php?api_key=xxxxxxxxxxxxxx';
my $email = '[email protected]';
my $from_email = '[email protected]';
my $smtp_server = 'smtp.fastmail.fm';
my $smtp_user = '[email protected]';
my $smtp_pass = 'XXXXXXXX';
my $sendemail = "sendemail -f $from_email -t $email -s $smtp_server -xu $smtp_user -o message-format=raw -xp $smtp_pass -m";
my $worker_prefix = 'xxx';
my $filename = '/tmp/.guild_timeouts';
my $dead_thres = 150.0;
my $h_timeout = {};
sub main {
my @lines = ();
read_timeouts();
sysexec('localhost', "wget --output-document=- $request 2>/dev/null", \@lines);
return 1 if ($lines[0] =~ /Failed to connect to/);
my $json = JSON->new->allow_nonref;
my $guild = $json->decode($lines[0]);
print_out("\$guild: $guild");
my $workers = $guild->{'workers'};
my $total = 0.0;
my @dead;
my @choped_dead;
for my $name (sort keys (%$workers)) {
my $worker_name = $workers->{$name}->{worker_name};
my $hash_rate = $workers->{$name}->{hash_rate};
print "$workers->{$name}->{worker_name}: $workers->{$name}->{hash_rate}\n";
if ($hash_rate < $dead_thres) {
push (@dead, $worker_name);
} else {
update_flag($worker_name, 1);
}
$total += $hash_rate;
}
print "Total: $total\n";
my $must_send = 0;
for my $name (@dead) {
my $choped = $name; $choped =~ s/$worker_prefix//g;
push @choped_dead, $choped;
if (down_flag($name)) {
$must_send = 1;
update_flag($name, 0);
}
}
if ($must_send) {
@lines = ();
print_log("Will send: @dead");
sysexec('localhost', $sendemail . " '@choped_dead'", \@lines);
}
write_timeouts();
print "\n";
}
sub update_flag {
my $worker = shift;
my $flag = shift;
$h_timeout->{$worker} = $flag;
}
sub down_flag {
my $worker = shift;
my $t = exists $h_timeout->{$worker} ? $h_timeout->{$worker} : 1;
return $t;
}
sub read_timeouts {
my $f;
local $/=undef;
open($f, '<', $filename) or return;
my $txt = <$f>;
eval $txt;
close $f;
}
sub write_timeouts {
my $f;
open($f, '>', $filename) or return;
my $txt = Data::Dumper->Dump([$h_timeout], ['$h_timeout']);
print $f $txt;
close $f;
}
my $local_hostname = 'localhost';
sub sysexec {
my ($host, $cmd, $lines) = @_;
my $aaa;
my $rc = 1;
local *KID;
return 1 if (!defined $host || $host eq '');
if ($host ne $local_hostname) {
$cmd = "ssh -o PreferredAuthentications=publickey $host -t '$cmd' 2>/dev/null";
}
my $pid = open(KID, "$cmd |");
if ($pid) { # parent
while (defined($aaa =
push(@$lines, $aaa);
}
close(KID);
$rc = ($?>> 8);
} else {
print_log("FATAL: Could not execute command '$cmd'");
return 1;
}
return $rc;
}
sub print_log {
my ($txt) = @_;
print $txt . "\n";
}
&main();
1;