Alt-NewRelic-Agent-FFI-Empty
view release on metacpan or search on metacpan
lib/NewRelic/Agent/FFI/Procedural.pm view on Meta::CPAN
=head2 newrelic_transaction_set_type_web
my $rc = newrelic_transaction_set_type_web $tx;
Sets the transaction type to 'web'
=head2 newrelic_transaction_set_type_other
my $rc = newrelic_transaction_set_type_other $tx;
Sets the transaction type to 'other'
=head2 newrelic_transaction_add_attribute
my $rc = newrelic_transaction_add_attribute $tx, $key => $value;
Adds the given attribute (key/value pair) for the transaction.
=head2 newrelic_transaction_notice_error
my $rc = newrelic_transaction_notice_error $tx, $exception_type, $error_message, $stack_trace, $stack_frame_delimiter;
Identify an error that occurred during the transaction. The first identified
error is sent with each transaction.
=head2 newrelic_transaction_end
my $rc = newrelic_transaction_end $tx;
=head2 newrelic_record_metric
my $rc = newrelic_record_metric $key => $value;
Records the given metric (key/value pair). The C<$value> should be a floating point.
=head2 newrelic_record_cpu_usage
my $rc = newrelic_record_cpu_usage $cpu_user_time_seconds, $cpu_usage_percent;
Records the CPU usage. C<$cpu_user_time_seconds> and C<$cpu_usage_percent> are floating point values.
=head2 newrelic_record_memory_usage
my $rc = newrelic_record_memory_usage $memory_megabytes;
Records the memory usage. C<$memory_megabytes> is a floating point value.
=head2 newrelic_segment_generic_begin
my $seg = newrelic_segment_generic_begin $tx, $parent_seg, $name;
Begins a new generic segment. C<$parent_seg> is a parent segment id (C<undef> no parent). C<$name> is a string.
=head2 newrelic_segment_datastore_begin
my $seg = newrelic_segment_datastore_begin $tx, $parent_seg, $table, $operation, $sql, $sql_trace_rollup_name;
my $seg = newrelic_segment_datastore_begin $tx, $parent_seg, $table, $operation, $sql, $sql_trace_rollup_name, $sql_obfuscator;
Begins a new datastore segment. C<$parent_seg> is a parent segment id (C<undef> no parent). C<$operation> should be
one of C<select>, C<insert>, C<update> or C<delete>.
If you want to provide your own obfuscator, you need to pass in the address of a C function. To do that from Perl you can
create a closure with L<FFI::Platypus>, like so:
use 5.010;
use FFI::Platypus;
use FFI::Platypus::Memory qw( strdup free );
sub myobfuscator
{
# input SQL
my($sql) = @_;
# make some kind of transformation
$sql =~ tr/a-z/z-a/;
# because C has a different ownership model than Perl for functions
# that return a string, you need to create a C pointer to a copy of
# the return value. On the next call we will free the previous copy.
state $ptr = 0;
free($ptr) if $ptr;
return $ptr = strdup($sql);
}
$ffi->type('(string)->opaque' => 'obfuscator_t');
my $myobfuscator_closure = $ffi->closure(\&myobfuscator);
my $myobfuscator_ptr = $ffi->cast('obfuscator_t' => 'opaque', $myobfuscator_closure);
newrelic_segment_datastore_begin $tx, $seg, $table, $sql, $rollup, $myobfuscator_ptr;
...
=head2 newrelic_segment_external_begin
my $seg = newrelic_segment_external_begin $tx, $parent_seg, $host, $name;
Begins a new external segment. C<$parent_seg> is a parent segment id (C<undef> no parent).
=head2 newrelic_segment_end
my $rc = newrelic_segment_end $tx, $seg;
End the given segment.
=head2 newrelic_register_message_handler
newrelic_register_message_handler $handler;
Register the message handler used to send messages to NewRelic. The only useful way at the moment to use
this function is by giving it C<newrelic_message_handler>, which sends messages directly to NewRelic,
rather than through a separate daemon process:
newrelic_register_message_handler newrelic_message_handler;
This needs to be called BEFORE you call C<newrelic_init>.
=head2 newrelic_message_handler
my $address = newrelic_message_handler;
Returns the address of the C function that handles sending messages directly to NewRelic. This cannot
( run in 1.633 second using v1.01-cache-2.11-cpan-39bf76dae61 )