BenchmarkAnything-Storage-Frontend-Lib
view release on metacpan or search on metacpan
lib/BenchmarkAnything/Storage/Frontend/Lib.pm view on Meta::CPAN
}
else {
die "benchmarkanything: can not flatten data structure (".reftype($entry).").\n";
}
}
}
else {
die "benchmarkanything: can not flatten data structure (".reftype($result).") - try other output format.\n";
}
return $output;
}
sub _format_flat
{
my ($self, $result, $opt) = @_;
# ensure array container
# for consistent output in 'getpoint' and 'search'
my $resultlist = reftype($result) eq 'ARRAY' ? $result : [$result];
my $output = "";
$opt->{separator} = ";" unless defined $opt->{separator};
$output .= $self->_format_flat_outer($resultlist, $opt);
return $output;
}
sub _output_format
{
my ($self, $data, $opt) = @_;
my $output = "";
my $outtype = $opt->{outtype} || 'json';
if ($outtype eq "yaml")
{
require YAML::Any;
$output .= YAML::Any::Dump($data);
}
elsif ($outtype eq "json")
{
eval "use JSON -convert_blessed_universally";
my $json = JSON->new->allow_nonref->pretty->allow_blessed->convert_blessed;
$output .= $json->encode($data);
}
elsif ($outtype eq "ini") {
require Config::INI::Serializer;
my $ini = Config::INI::Serializer->new;
$output .= $ini->serialize($data);
}
elsif ($outtype eq "dumper")
{
require Data::Dumper;
$output .= Data::Dumper::Dumper($data);
}
elsif ($outtype eq "xml")
{
require XML::Simple;
my $xs = new XML::Simple;
$output .= $xs->XMLout($data, AttrIndent => 1, KeepRoot => 1);
}
elsif ($outtype eq "flat") {
$output .= $self->_format_flat( $data, $opt );
}
else
{
die "benchmarkanything-storage: unrecognized output format: $outtype.";
}
return $output;
}
sub connect
{
my ($self) = @_;
my $backend = $self->{config}{benchmarkanything}{backend};
if ($backend eq 'local')
{
require DBI;
require BenchmarkAnything::Storage::Backend::SQL;
no warnings 'once'; # avoid 'Name "DBI::errstr" used only once'
# connect
print "Connect db...\n" if $self->{debug};
my $dsn = $self->{config}{benchmarkanything}{storage}{backend}{sql}{dsn};
my $user = $self->{config}{benchmarkanything}{storage}{backend}{sql}{user};
my $password = $self->{config}{benchmarkanything}{storage}{backend}{sql}{password};
my $dbh = DBI->connect($dsn, $user, $password, {'RaiseError' => 1, 'mysql_auto_reconnect' => 1})
or die "benchmarkanything: can not connect: ".$DBI::errstr;
# external search engine
my $searchengine = $self->{config}{benchmarkanything}{searchengine} || {};
# remember
$self->{dbh} = $dbh;
$self->{backend} = BenchmarkAnything::Storage::Backend::SQL->new({dbh => $dbh,
dbh_config => $self->{config}{benchmarkanything}{storage}{backend}{sql},
debug => $self->{config}{benchmarkanything}{debug},
force => $self->{force},
verbose => $self->{config}{benchmarkanything}{verbose},
(keys %$searchengine ? (searchengine => $searchengine) : ()),
});
}
elsif ($backend eq 'http')
{
my $ua = $self->_get_user_agent;
my $url = $self->_get_base_url."/api/v1/hello";
die "benchmarkanything: can't connect to result storage ($url)\n" if (!$ua->get($url)->res->code or $ua->get($url)->res->code != 200);
}
return $self;
}
sub disconnect
{
my ($self) = @_;
my $backend = $self->{config}{benchmarkanything}{backend};
( run in 0.508 second using v1.01-cache-2.11-cpan-39bf76dae61 )