#!/usr/local/bin/perl -w package speak_db_names; use Net::Server::PreForkSimple; @ISA = qw{Net::Server::PreForkSimple}; use strict; use Time::Format qw{%time}; use Data::Dumper; use File::Basename; my $basedir = dirname($0); my $refresh_time = 10; my $last_server_update; my $servers = [ ]; $servers = load_data($servers, undef); speak_db_names->run(conf_file => 'speak_db_names.conf'); ## sub process_request {{{ sub process_request { my $self = shift; $servers = load_data($servers, $self); eval { local $SIG{ALRM} = sub { die "Timed Out" }; my $timeout = 2; my $previous_alarm = alarm($timeout); print join( ',', @$servers); alarm($timeout); } } ## }}} ## sub load_data {{{ sub load_data { my $servers = shift; my $self = shift; unless ($last_server_update) { $last_server_update = 0 } if ( (time - $last_server_update) > $refresh_time ) { Net::Server::write_to_log_hook($self, 3, 'DB Cache expired: ' . (time - $last_server_update) . ' Seconds Old... Reloading'); Net::Server::write_to_log_hook($self, 3, 'Now: ' . time . " Last Upd: $last_server_update"); my $ret = `$basedir/check_database_health.pl .1 2>>/var/log/check_db_names.log`; $last_server_update = time; @$servers = split(/\t/, $ret); return $servers; } else { Net::Server::write_to_log_hook($self, 3, 'Reusing DB Cache ' . (time - $last_server_update) . ' Seconds old'); return $servers; } } ## }}} 1;