
=head1 NAME



OpenTracing::Manual::Ecosystem - An overview of the OpenTracing puzzle pieces



=head1 DESCRIPTION



Please have a look at the following modules or distributions to get more
detailed information about all the puzzle pieces.



=head1 TABLE Of CONTENTS



=over

=item L</"The OpenTracing API Specification">

=item L</"Frameworks and Integrating OpenTracing">

=item L</"Instrumenting a Application">

=item L</"Implementations">

=item L</"Development and Testing">

=item L</"Planned work">

=item L</"The Roadmap">

=back



=head1 AN OVERVIEW PER CATEGORY



=head2 The OpenTracing API Specification

The specification itself, and related modules.

=over

=item L<OpenTracing::Interface>

The description of the interface.

=item L<OpenTracing::Types>

To make type-checking more easy.

=item L<OpenTracing::Implementation::NoOp>

Prevent applications from crashing.

=back



=head2 Frameworks and Integrating OpenTracing

Distributed Tracing is all about connecting services and microservices together,
the following modules will handle the edges of the application and services and
bootstrap tracer implementations.

=over

=item L<CGI::Application::Plugin::OpenTracing>

Auto generate root-span on newly started trace, and on top a setup-span, a
run-span and more.

=item L<CGI::Application::Plugin::OpenTracing::DataDog>

Take care of all the specifics for DataDog.
Comes bundled with L<CGI::Application::Plugin::OpenTracing>.

=back



=head2 Instrumenting a Application

Once an application is running and the framwork has taken care of most of the
bootstrapping, the following modules help to can more detailed spans.

=over

=item L<OpenTracing::GlobalTracer>

Get access to a bootstrapped implementation.

=item L<OpenTracing::AutoScope>

Finish a span after exiting a scope.

=back



=head2 Implementations

A list of various Implementations that are compliant with the OpenTracing API.

=over

=item L<OpenTracing::Implementation>

Bootstrap an implementation and set a global tracer.

=item L<OpenTracing::Implementation::NoOp>

Prevent applications from crashing.

=item L<OpenTracing::Implementation::Test>

Build a data structure that can be used to do a C<cmp_deeply> variant.

=item L<OpenTracing::Implementation::DataDog>

Send traces and spans to the DataDog agent on the local host.

=back



=head2 Development and Testing

Modules that might be of interest when developping integrations or
implementations.

=over

=item L<OpenTracing::Implementation::Test>

Build a data structure that can be used to do a C<cmp_deeply> variant.

=item L<Test::OpenTracing>

Because we made mistakes.

=item L<Test::OpenTracing::Interface>

Check that the classes/objects adhere to the defined OpenTracing::Interface
description.

=item L<Test::OpenTracing::Integration>

Do a C<cmp_deeply> on a testing implementation.

=item L<OpenTracing::Roles>

A generic set of attributes and methods for building implementations.

=back



=head2 Planned work

The following modules will be needed for easier instrumentation of an
application or better framework integration and distributed tracing.

=over

=item L<OpenTracing::WrapScope>

Wrap full-qualified named subroutines in a scope, instead of modifying all the
codebase.

=item L<DBIx::OpenTracing>

Trace all C<DBI> requests, using L<DBIx::QueryLog>.

=item L<LWP::UserAgent::Plugin::OpenTracing>

OpenTracing C<inject_context> method for L<LWP::UserAgent>.

=item L<HTTP::Tiny::Plugin::OpenTracing>

OpenTracing C<inject_context> method for L<HTTP::Tiny>.

=item L<Plack::Middleware::OpenTracing>

OpenTracing C<extract_context> and create initial root-spans.

=item L<OpenTracing::HTTP::Headers>

Inject current `SpanContext`, a drop-in replacement, or even override
everywhere!.

=back



=head2 The Roadmap

Since all the work has been done for Peceptyx, no further development will be
done on the following, unless ...

Please contact the author!

=over

=item L<OpenTracing::Implementation::Zipkin>

See ... .

=item L<OpenTracing::Implementation::Elastic>

See ... .

=item L<OpenTracing::Implementation::Jaeger>

See ... .

=item L<OpenTracing::Implementation::XRay>

See ... .

=item L<OpenTracing::Implementation::NewRelic>

See L<New Relic APM|https://docs.newrelic.com/docs/apm>.

=item L<Dancer2::Plugin::OpenTracing>

See L<Dancer2::Plugin>.

=item L<Mojolicious::Plugin::OpenTracing>

See L<Mojolicious::Plugin>.

=item L<Catalyst::Plugin::OpenTracing>

See L<Catalyst>.

=item L<MooX::OpenTracing>

Get access to the L<OpenTracing::GlobalTracer> a la L<MooX::LogAny>.

=back



=head1 SEE ALSO



=over

=item L<OpenTracing::Interface>

A role that defines the Tracer interface.

=item L<OpenTracing::Manual>

A quick overview about Perl5 and OpenTracing

=item L<OpenTracing::Manual::Instrumentation>

For Application developers and Devops.

=item L<OpenTracing::Manual::Integration>

For Framework or Integration Developers

=item L<OpenTracing::Manual::Implementation>

For Tracing Service Implementations

=item L<OpenTracing Overview|https://opentracing.io/docs/overview/>

The OpenTracing API standard.

=back



=head1 AUTHOR



Theo van Hoesel <tvanhoesel@perceptyx.com>



=head1 COPYRIGHT AND LICENSE



'OpenTracing API for Perl' 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 library 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.
