use 5.008;
use strict;
use warnings;
package BenchmarkAnything::Reporter;
  $BenchmarkAnything::Reporter::AUTHORITY = 'cpan:SCHWIGON';
# ABSTRACT: Handle result reporting to a BenchmarkAnything HTTP/REST API
$BenchmarkAnything::Reporter::VERSION = '0.003';

sub new
        my $class = shift;
        my $self  = bless { @_ }, $class;

        require BenchmarkAnything::Config;
        $self->{config} = BenchmarkAnything::Config->new unless $self->{config};

        return $self;

sub report
        my ($self, $data) = @_;

        # --- validate ---
        if (not $data)
                die "benchmarkanything: no input data provided.\n";

        my $ua  = $self->_get_user_agent;
        my $url = $self->_get_base_url."/api/v1/add";
        print "Report data...\n" if $self->{verbose} or $self->{debug};
        my $res = $ua->post($url => json => $data)->res;
        print "Done.\n" if $self->{verbose} or $self->{debug};

        die "benchmarkanything: ".$res->error->{message}." ($url)\n" if $res->error;

        return $self;

sub _get_user_agent
        require Mojo::UserAgent;
        return Mojo::UserAgent->new;

sub _get_base_url




=encoding UTF-8

=head1 NAME

BenchmarkAnything::Reporter - Handle result reporting to a BenchmarkAnything HTTP/REST API

=head2 new

Instantiate a new object.

=over 4

=item * config

Path to config file. If not provided it uses env variable
C<BENCHMARKANYTHING_CONFIGFILE> or C<$home/.benchmarkanything.cfg>.

=item * verbose

Print out progress messages.


=head2 report ($data)

Reports all data points of a BenchmarkAnything structure to the
configured HTTP/REST URL.

=head1 AUTHOR

Steffen Schwigon <>


This software is copyright (c) 2015 by Steffen Schwigon.

This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.