Alt-NewRelic-Agent-FFI-Empty

 view release on metacpan or  search on metacpan

lib/NewRelic/Agent/FFI/Procedural.pm  view on Meta::CPAN

321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
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
 {

t/newrelic_agent_ffi__live.t  view on Meta::CPAN

62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
  note "seg = $seg";
 
  sleep rand .5;
 
  is $nr->end_segment($tx, $seg), 0, 'end_segment';
 
};
 
subtest 'datastore segment' => sub {
 
  my $seg = $nr->begin_datastore_segment($tx, undef, 'users', 'selecting users', 'SELECT * FROM users WHERE id = ?', 'get_user_account');
  ok $seg, 'begin_datastore_segment';
  note "seg = $seg";
 
  sleep rand .5;
 
  is $nr->end_segment($tx, $seg), 0, 'end_segment';
 
};
 
subtest 'external segment' => sub {

t/newrelic_agent_ffi_procedural.t  view on Meta::CPAN

46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
subtest 'newrelic_segment_datastore_begin' => sub {
 
  my $tx = newrelic_transaction_begin;
  ok $tx, 'newrelic_transaction_begin';
 
  our $sql_in;
  sub myobfuscator
  {
    ($sql_in) = @_;
    note "myobfuscator($sql_in)";
    my $sql_out = 'select * from users where password = ?';
    state $ptr = 0;
    free($ptr) if $ptr;
    $ptr = strdup $sql_out;
  }
   
  my $ffi = FFI::Platypus->new;
  $ffi->type('(string)->opaque' => 'ob');
  my $myobfuscator_closure = $ffi->closure(\&myobfuscator);
  my $myobfuscator_ptr = $ffi->cast(ob => opaque => $myobfuscator_closure);
  note "\$myobfuscator_ptr = $myobfuscator_ptr";
   
  my $seg = newrelic_segment_datastore_begin $tx, NEWRELIC_ROOT_SEGMENT, 'mytable', 'select', "select * from users where password = 'secret'", 'get_user_pw', $myobfuscator_ptr;
  ok $seg, 'newrelic_segment_datastore_begin';
 
  #is $sql_in, "select * from users where password = 'secret'", 'myobfuscator called';
   
  sleep rand .5;
   
  my $rc = newrelic_segment_end $tx, $seg;
  is $rc, 0, 'newrelic_segment_end';
   
  newrelic_transaction_end $tx;
  ok 1, 'newrelic_transaction_end';
};



( run in 0.482 second using v1.01-cache-2.11-cpan-65fba6d93b7 )