NAME

OpenTracing::AutoScope - Automagically create and close scoped spans.

SYNOPSIS

    MyPackage;
    
    use OpenTracing::AutoScope;
    
    sub foo {
        OpenTracing::AutoScope->start_guarded_span;
        
        ...
        
    }

DESCRIPTION

Using the start_guarded_span class method is just a convenience around things like:

    use OpenTracing::GlobalTracer qw/$TRACER/;
    
    sub foo {
        my $scope = $TRACER->start_active_span( 'MyPackage::foo' => { options };
        
        my $self = shift;
        
        ... # do stuff
        
        $scope->close
        
        return $foo
    }

OpenTracing provides an instance method for a $tracer, called start_active_span and returns a scope object. But scope object, according to the API spec needs to be closed by the programmer and it will issue a warning if not done so.

But that strategy becomes very inconvenient if a programmer wants to do 'return early' or bail out half way because of some other conditions.

This being Perl, we can do better and use the features that would normally come on the end of scope and could use a DESTROY or DEMOLISH method. But that would still send out a warning.

This module will make it easy again, and a bit more. It will call close on the relevant scope it has created automagically.

It will also use the subroutine name as the operation name, that otherwise would be required.

CLASS METHODS

start_guarded_span

Starts a scope guarded span which will automagically get closed once the process runs out of the current scope. It returns nothing, in order to prevent programmers from explicitly closing the returned scope.

It does not need an operation_name, it will default to the current subroutine name. Other than that, it accepts any or all of the options for $TRACER->start_active_span.

AUTHOR

Theo van Hoesel <tvanhoesel@perceptyx.com>

COPYRIGHT AND LICENSE

'OpenTracing::AutoScope' is Copyright (C) 2019 .. 2020, Perceptyx Inc

This library is free software; you can redistribute it and/or modify it under the terms of the Artistic License 2.0.

This package is distributed in the hope that it will be useful, but it is provided "as is" and without any express or implied warranties.

For details, see the full text of the license in the file LICENSE.