Tapper v0.2.0 Tapper.Application

Tapper main application; configures and starts application supervisor.

Add :tapper to your application’s mix.exs:

# Configuration for the OTP application.
#
# Type `mix help compile.app` for more information.
def application do
  [mod: {MyApp, []},
   applications: [
     :tapper
     # other applications
    ]]
end

Configuration

Looks for configuration under :tapper key:

keytypepurpose
system_idString.tThis application’s id; used for service_name in default Endpoint used in annotations; default unknown
iptupleThis application’s principle IPV4 or IPV6 address, as 4- or 8-tuple of ints; defaults to IP of first non-loopback interface, or {127.0.0.1} if none.
portintegerThe application’s principle port, e.g. HTTP port 80; defaults to 0
reporteratomModule implementing Tapper.Reporter.Api to use for reporting spans, defaults to Tapper.Reporter.Console.

All keys support the Phoenix-style {:system, var} format, to allow lookup from shell environment variables, e.g. {:system, "PORT"} to read PORT environment variable.

Config values will be converted to the expected type, principally so that string values can be handled from environment variables:

  • ip is expected in dotted IPV4 or colon IPV6 notation, see Erlang’s inet:parse_address/1
  • reporter can be specified as a string which will be converted to an atom, following Elixir’s module name rules.

Example

In config.exs etc.:

config :tapper,
  system_id: "my-cool-svc",
  reporter: Tapper.Reporter.Zipkin,
  port: {:system, "PORT"}

Summary

Functions

Called when an application is started

Functions

start(type, args)

Called when an application is started.

This function is called when an the application is started using Application.start/2 (and functions on top of that, such as Application.ensure_started/2). This function should start the top-level process of the application (which should be the top supervisor of the application’s supervision tree if the application follows the OTP design principles around supervision).

start_type defines how the application is started:

  • :normal - used if the startup is a normal startup or if the application is distributed and is started on the current node because of a failover from another mode and the application specification key :start_phases is :undefined.
  • {:takeover, node} - used if the application is distributed and is started on the current node because of a failover on the node node.
  • {:failover, node} - used if the application is distributed and is started on the current node because of a failover on node node, and the application specification key :start_phases is not :undefined.

start_args are the arguments passed to the application in the :mod specification key (e.g., mod: {MyApp, [:my_args]}).

This function should either return {:ok, pid} or {:ok, pid, state} if startup is successful. pid should be the PID of the top supervisor. state can be an arbitrary term, and if omitted will default to []; if the application is later stopped, state is passed to the stop/1 callback (see the documentation for the c:stop/1 callback for more information).

use Application provides no default implementation for the start/2 callback.

Callback implementation for Application.start/2.