AWS-SNS-Confess

 view release on metacpan or  search on metacpan

lib/AWS/SNS/Confess.pm  view on Meta::CPAN

use base 'Exporter';
use Amazon::SNS;
use Devel::StackTrace;
use strict;
use warnings 'all';

our @EXPORT_OK = qw/confess/;

our ($access_key_id, $secret_access_key, $topic, $sns, $sns_topic);

sub setup
{
  my (%args) = @_;
  $access_key_id = $args{access_key_id};
  $secret_access_key = $args{secret_access_key};
  $topic = $args{topic};
  $sns = $args{sns} || Amazon::SNS->new({
    key => $access_key_id,
    secret => $secret_access_key,
  });
  $sns->service(_service_url());
  $sns_topic = $sns->GetTopic($topic);
}

sub confess
{
  my ($msg) = @_;
  my $full_message = "Runtime Error: $msg\n"
    . Devel::StackTrace->new->as_string;

  _send_msg( $full_message );
  die $msg;
}

sub _service_url
{
  die "no topic specified" unless $topic;
  if ($topic =~ m/^arn:aws:sns:([^:]+):\d+:[^:]+$/)
  {
    return "http://sns.$1.amazonaws.com";
  }
  return "http://sns.us-east-1.amazonaws.com";
}

sub _send_msg
{
  $sns_topic->Publish(shift);
}

1;



__END__
=pod

t/basic.t  view on Meta::CPAN

#!/usr/bin/perl -w

package Amazon::SNS::Topic::Mock;
use base 'Amazon::SNS::Topic';

our @log = ();

sub new
{
  my ($class, %args ) = @_;
  return bless \%args, $class;
}

sub Publish
{
  my ($s, $msg) = @_;
  push @log, $msg;
}

sub LastLogEntry
{
  return $log[-1];
}

1;

package Amazon::SNS::Mock;
use base 'Amazon::SNS';
our $topic = Amazon::SNS::Topic::Mock->new();

sub GetTopic
{
  return $topic;
}
1;


package main;
use strict;
use warnings 'all';
no warnings 'once';

 view all matches for this distribution
 view release on metacpan -  search on metacpan

( run in 0.555 second using v1.00-cache-2.02-grep-82fe00e-cpan-2c419f77a38b )