=item $log
-If provided, errors and messages will be logged to the logfile, otherwise stdout
+If provided, errors and messages will be logged to the logfile, otherwise to speak.log
=back
=cut
- if (-f "$FindBin::Bin/shh") {
- if ($log) {
- $log->msg("Not speaking because we were asked to be quiet - $msg");
- } else {
- verbose "Not speaking because we were asked to be quiet - $msg";
- } # if
+ $log = Logger->new(
+ path => '/var/local/log',
+ name => 'speak',
+ timestamped => 'yes',
+ append => 1,
+ ) unless $log;
+
+ if (-f "$FindBin::Bin/../data/shh") {
+ $msg .= ' [silent shh]';
+ $log->msg($msg);
return;
} # if
# Handle the case where $msg is a filehandle
$msg = <$msg> if ref $msg eq 'GLOB';
- # We can't have two speakers going at the same time so if we have an error
- # backoff a little and try again.
- my $attempts = 0;
- my $maxretries = 3;
- my $backoff = 2;
-
- my ($status, @output);
-
- while ($attempts++ < $maxretries) {
- ($status, @output) = Execute "/usr/local/bin/gt \"$msg\"";
-
- if ($status) {
- my $errmsg = "Unable to speak (Status: $status) - " . join "\n", @output;
+ # Log message to log file if $log was passed in.
+ $log->msg($msg);
- if ($log) {
- $log->err($errmsg);
- } else {
- error $errmsg;
- } # if
+ #$msg = quotemeta $msg;
+ $msg =~ s/\$/\\\$/g;
- sleep $backoff++;
- } else {
- return; # We said our piece...
- } # if
- } # while
+ my ($status, @output) = Execute "/usr/local/bin/gt \"$msg\"";
- my $errmsg = 'Maximum retries exceeded - terminating';
+ if ($status) {
+ my $errmsg = "Unable to speak (Status: $status) - " . join "\n", @output;
- if ($log) {
- $log->err($errmsg, $status);
- } else {
- error $errmsg, $status;
+ $log->err($errmsg);
} # if
return;