ETL-Yertl
view release on metacpan or search on metacpan
lib/ETL/Yertl/Adapter/graphite.pm view on Meta::CPAN
if ( $query->{ end } ) {
$form{ until } = _format_graphite_dt( $query->{end} );
}
my $url = URI->new( sprintf 'http://%s:%s/render', $self->{host}, $self->{http_port} );
$url->query_form( %form );
#; say "Fetching $url";
my $res = $self->http_client->GET( $url )->get;
#; say $res->decoded_content;
if ( $res->is_error ) {
die sprintf "Error fetching metric '%s': " . $res->decoded_content . "\n", $metric;
}
my $result = decode_json( $res->decoded_content );
my @points;
for my $series ( @{ $result } ) {
for my $point ( @{ $series->{datapoints} } ) {
push @points, {
metric => $series->{target},
timestamp => Time::Piece->gmtime( $point->[1] )->datetime,
value => $point->[0],
};
}
}
lib/ETL/Yertl/Adapter/influxdb.pm view on Meta::CPAN
if ( @where ) {
$q .= ' WHERE ' . join " AND ", @where;
}
my $url = URI->new( sprintf 'http://%s:%s/query', $self->{host}, $self->{port} );
$url->query_form( db => $db, q => $q );
#; say "Fetching $url";
my $res = $self->client->GET( $url )->get;
#; say $res->decoded_content;
if ( $res->is_error ) {
die sprintf "Error fetching metric '%s': " . $res->decoded_content . "\n", $metric;
}
my $result = decode_json( $res->decoded_content );
my @points;
for my $series ( map @{ $_->{series} }, @{ $result->{results} } ) {
my $time_i = first { $series->{columns}[$_] eq 'time' } 0..$#{ $series->{columns} };
my $value_i = first { $series->{columns}[$_] eq $field } 0..$#{ $series->{columns} };
push @points, map {
+{
metric => join( ".", $db, $series->{name}, ( $field ne 'value' ? ( $field ) : () ) ),
timestamp => $_->[ $time_i ],
value => $_->[ $value_i ],
lib/ETL/Yertl/Adapter/influxdb.pm view on Meta::CPAN
$metric, $tags, $field || "value",
$point->{value}, $ts;
}
for my $db ( keys %db_lines ) {
my @lines = @{ $db_lines{ $db } };
my $body = join "\n", @lines;
my $url = URI->new( sprintf 'http://%s:%s/write?db=%s', $self->{host}, $self->{port}, $db );
my $res = $self->client->POST( $url, $body, content_type => 'text/plain' )->get;
if ( $res->is_error ) {
my $result = decode_json( $res->decoded_content );
die "Error writing metric '%s': $result->{error}\n";
}
}
return;
}
1;
__END__
( run in 0.237 second using v1.01-cache-2.11-cpan-26ccb49234f )