App-Spoor

 view release on metacpan or  search on metacpan

lib/App/Spoor/ApiClient.pm  view on Meta::CPAN


=cut

sub most_recent_reports {
  my $host = shift;
  my $user_agent = shift;
  my $config = shift;

  my $uri = $config->{host} . '/api/reports?' . http_build_query({reports => {host => $host}});

  my $credentials = 'Basic ' . encode_base64(
    $config->{credentials}{api_identifier} . ':' . $config->{credentials}{api_secret}
  );

  my $response = $user_agent->get(
    $uri,
    'Authorization' => $credentials,
    'HTTP-Accept' => 'application/json'
  );

  from_json($response->content)->{reports};
}

=head2 most_recent_mailbox_events

Fetches the most recent mailbox events from the SpoorAPI. 

lib/App/Spoor/ApiClient.pm  view on Meta::CPAN


=cut

sub most_recent_mailbox_events {
  my $host = shift;
  my $user_agent = shift;
  my $config = shift;

  my $uri = $config->{host} . '/api/mailbox_events?' . http_build_query({mailbox_events => {host => $host}});

  my $credentials = 'Basic ' . encode_base64(
    $config->{credentials}{api_identifier} . ':' . $config->{credentials}{api_secret}
  );

  my $response = $user_agent->get(
    $uri,
    'Authorization' => $credentials,
    'HTTP-Accept' => 'application/json'
  );

  from_json($response->content)->{mailbox_events};
}

=head1 AUTHOR

Rory McKinley, C<< <rorymckinley at capefox.co> >>

lib/App/Spoor/Config.pm  view on Meta::CPAN

      debug: 1
      maxinterval: 10
      name: /usr/local/cpanel/logs/error_log
      transformer: bin/login_log_transformer.pl
    login:
      debug: 1
      maxinterval: 10
      name: /usr/local/cpanel/logs/login_log
      transformer: bin/login_log_transformer.pl
  transmission:
    credentials:
      api_identifier: api_identifier_goes_here
      api_secret: api_secret_goes_here
    endpoints:
      report: /api/reports
    host: https://spoor.capefox.co

=head1 SUBROUTINES/METHODS

=head2 get_follower_config

lib/App/Spoor/EntryTransmitter.pm  view on Meta::CPAN


=cut

sub transmit {
  my $data = shift;
  my $ua = shift;
  my $config = shift;

  my $uri = $config->{host} . $config->{endpoints}{report};

  my $credentials = 'Basic ' . encode_base64(
    $config->{credentials}{api_identifier} . ':' . $config->{credentials}{api_secret}
  );

  my $content = to_json({
    report => {
      entries => [
        $data
      ],
      metadata => {
        reporter => $config->{reporter}
      }
    },
  });

  my $result = $ua->post(
    $uri,
    'Content-Type' => 'application/json',
    'Authorization' => $credentials,
    'Content' => $content
  );

  $result->code() eq '202';
}

=head1 AUTHOR

Rory McKinley, C<< <rorymckinley at capefox.co> >>

lib/App/Spoor/Installer.pm  view on Meta::CPAN

          transformer => 'bin/login_log_transformer.pl',
        },
        error => {
          name => $install_parameters->{'error_log_path'},
          maxinterval => 10,
          debug => 1,
          transformer => 'bin/login_log_transformer.pl',
        },
      },
      transmission => {
        credentials => {
          api_identifier => $install_parameters->{'api_identifier'},
          api_secret => $install_parameters->{'api_secret'},
        },
        host => 'https://spoor.capefox.co',
        endpoints => {
          report => '/api/reports',
        }
      }
    });

t/ApiCient.t  view on Meta::CPAN

use strict;
use warnings;
use utf8;

use Test::More;
use Test::LWP::UserAgent;
use MIME::Base64 qw(encode_base64);
use JSON;

my %config = (
  credentials => {
    api_identifier => 'user123',
    api_secret => 'secret',
  },
  host => 'http://localhost:3000',
  endpoints => {
    report => '/api/reports',
  },
  reporter => 'spoor.test.capefox.co'
);

t/ApiCient.t  view on Meta::CPAN

  'most_recent_reports correctly builds the URI'
);
is(
  $last_request->header('HTTP-Accept'),
  'application/json',
  'most_recent_reports accepts JSON'
);
is(
  $last_request->header('Authorization'),
  'Basic ' . encode_base64('user123:secret'),
  'most_recent_reports Sets basic auth credentials'
);

is_deeply($result, \@reports_data, 'most_recent_reports returns a reference to the reports from the API');

ok(defined(&App::Spoor::ApiClient::most_recent_mailbox_events), 'App::Spoor::ApiClient::most_recent_reports is defined');

$ua = Test::LWP::UserAgent->new;
my @mailbox_events_data = (
  {
    id => '456-GHI',

t/ApiCient.t  view on Meta::CPAN

  "http://localhost:3000/api/mailbox_events?mailbox_events%5Bhost%5D=$host",
  'most_recent_mailbox_events correctly builds the URI');
is(
  $last_request->header('HTTP-Accept'),
  'application/json',
  'most_recent_mailbox_events accepts JSON'
);
is(
  $last_request->header('Authorization'),
  'Basic ' . encode_base64('user123:secret'),
  'most_recent_mailbox_events Sets basic auth credentials'
);

is_deeply($result, \@mailbox_events_data, 'most_recent_mailbox_events returns a reference to the reports from the API');

done_testing();

t/Config.t  view on Meta::CPAN

      transformer => 'bah',
    },
    access => {
      name => '/foo/bar/baz/access',
      maxinterval => 50,
      debug => 1,
      transformer => 'foo',
    }
  },
  transmission => {
    credentials => {
      api_identifier => 'user123',
      api_secret => 'secret',
    },
    host => 'https://spoor.capefox.co',
    endpoints => {
      report => '/api/reports',
      partial_report_log => '/api/partial_reports/log',
    }
  }
);

t/EntryTransmitter.t  view on Meta::CPAN

use strict;
use warnings;
use utf8;

use Test::More;
use Test::LWP::UserAgent;
use MIME::Base64 qw(encode_base64);
use JSON;

my %config = (
  credentials => {
    api_identifier => 'user123',
    api_secret => 'secret',
  },
  host => 'http://localhost:3000',
  endpoints => {
    report => '/api/reports',
  },
  reporter => 'spoor.test.capefox.co'
);

t/EntryTransmitter.t  view on Meta::CPAN

  },
);

App::Spoor::EntryTransmitter::transmit(\%login_data, $ua, \%config);

my $last_request = $ua->last_http_request_sent;

is($last_request->method(), 'POST', 'Posts login data to the api');
is($last_request->uri(), 'http://localhost:3000/api/reports', 'URI is correct');
is($last_request->header('Content-Type'), 'application/json', 'JSON content type');
is($last_request->header('Authorization'), 'Basic ' . encode_base64('user123:secret'), 'Sets basic auth credentials');
is_deeply(from_json($last_request->content()), \%submitted_login_content, 'Submits the login data correctly');

my %forward_added_partial_data = (
  type => 'forward_added_partial',
  foo => 'bar'
);

my %submitted_forward_added_partial_content = (
  report => {
    entries => [

t/EntryTransmitter.t  view on Meta::CPAN

  },
);

App::Spoor::EntryTransmitter::transmit(\%forward_added_partial_data, $ua, \%config);

$last_request = $ua->last_http_request_sent;

is($last_request->method(), 'POST', 'Posts forward_added_partial data to the api');
is($last_request->uri(), 'http://localhost:3000/api/reports', 'URI is correct');
is($last_request->header('Content-Type'), 'application/json', 'JSON content type');
is($last_request->header('Authorization'), 'Basic ' . encode_base64('user123:secret'), 'Sets basic auth credentials');
is_deeply(
  from_json($last_request->content()), 
  \%submitted_forward_added_partial_content,
  'Submits the added forward partial data correctly'
);

$ua = Test::LWP::UserAgent->new;
$ua->map_response(qr{reports}, HTTP::Response->new('202', 'OK', [], ''));
ok(
  App::Spoor::EntryTransmitter::transmit(\%forward_added_partial_data, $ua, \%config),

t/Installer.t  view on Meta::CPAN

      transformer => 'bin/login_log_transformer.pl',
    },
    error => {
      name => $installation_config{'error_log_path'},
      maxinterval => 10,
      debug => 1,
      transformer => 'bin/login_log_transformer.pl',
    },
  },
  transmission => {
    credentials => {
      api_identifier => $installation_config{'api_identifier'},
      api_secret => $installation_config{'api_secret'},
    },
    host => 'https://spoor.capefox.co',
    endpoints => {
      report => '/api/reports',
    }
  }
);



( run in 0.295 second using v1.01-cache-2.11-cpan-4d50c553e7e )