package Tapper::Reports::Receiver::Level2::Codespeed; BEGIN { $Tapper::Reports::Receiver::Level2::Codespeed::AUTHORITY = 'cpan:AMD'; } { $Tapper::Reports::Receiver::Level2::Codespeed::VERSION = '4.1.1'; } use strict; use warnings; use LWP::UserAgent; use Data::DPath 'dpath'; use Scalar::Util "reftype"; sub submit { my ($util, $report, $options) = @_; my $codespeed_url = $options->{url}; my $subscribe_dpath = $options->{subscribe_dpath}; return unless $codespeed_url && $subscribe_dpath; my $max_retry = 5; my $tap_dom = $report->get_cached_tapdom; my @chunks = dpath($subscribe_dpath)->match($tap_dom); @chunks = @{$chunks[0]} while $chunks[0] && reftype $chunks[0] eq "ARRAY"; # deref all array envelops return unless @chunks; my $ua = LWP::UserAgent->new; $ua->timeout(10); foreach my $chunk (@chunks) { my $response; my $retry = $max_retry; do { $response = $ua->post($codespeed_url."/result/add/", $chunk); } while ( !$response->is_success and $retry-- ); $util->log->warn("Submit to $codespeed_url FAILED.") if !$response->is_success; } } 1; __END__ =pod =encoding utf-8 =head1 NAME Tapper::Reports::Receiver::Level2::Codespeed =head1 SYNOPSIS Used indirectly via L. package Tapper::Reports::Receiver::Level2::Codespeed; sub submit { my ($util, $report, $options) = @_; # ... actual data forwarding here } =head2 submit Submit carved out data from a report to a Codespeed application URL. =head1 NAME Tapper::Reports::Receiver::Level2::Codespeed - Tapper - Level2 receiver plugin: Codespeed =head1 ABOUT I are other data receivers besides Tapper to which data is forwarded when a report is arriving at the Tapper::Reports::Receiver. One example is Codespeed to track benchmark values. By convention, for Codespeed the data is already prepared in the TAP report like this: ok perlformance --- codespeed: - benchmark: Rx.regexes.fieldsplit1 commitid: 1b1a3d2a environment: renormalist executable: perl-5.12.1-foo project: perl result_value: 2.58451795578003 - benchmark: Rx.regexes.fieldsplit2 commitid: 1b1a3d2b environment: renormalist executable: perl-5.12.1-foo project: perl result_value: 1.04680895805359 ... ok some other TAP stuff I.e., it requires a key C containing an array of chunks with keys that Codespeed is expecting. =head1 AUTHOR AMD OSRC Tapper Team =head1 COPYRIGHT AND LICENSE This software is Copyright (c) 2012 by Advanced Micro Devices, Inc.. This is free software, licensed under: The (two-clause) FreeBSD License =cut