Packages
appsignal
2.17.0
2.17.4
2.17.3
2.17.2
2.17.1
2.17.0
2.16.0
2.15.11
2.15.10
2.15.9
2.15.8
2.15.7
2.15.6
2.15.5
2.15.4
2.15.3
2.15.2
2.15.1
2.15.0
2.14.1
2.14.0
2.13.4
2.13.3
2.13.2
2.13.1
2.13.0
2.12.3
2.12.2
2.12.1
2.12.0
2.11.0
2.10.2
2.10.1
2.10.0
2.9.2
2.9.1
2.9.0
2.8.3
2.8.2
2.8.1
2.8.0
2.7.13
2.7.12
2.7.11
2.7.10
2.7.9
2.7.8
2.7.7
2.7.6
2.7.5
2.7.4
2.7.3
2.7.2
2.7.1
2.7.0
2.7.0-beta.1
2.6.1
2.6.0
2.5.3
2.5.2
2.5.1
2.5.0
2.4.3
2.4.2
2.4.1
2.4.0
2.3.1
2.3.0
2.2.19
2.2.18
2.2.17
2.2.16
2.2.15
2.2.14
2.2.13
2.2.12
retired
2.2.11
2.2.10
2.2.9
2.2.8
2.2.7
2.2.6
2.2.5
2.2.4
2.2.3
2.2.2
2.2.1
2.2.0
2.1.15
2.1.14
2.1.13
2.1.12
2.1.11
2.1.10
2.1.9
2.1.8
2.1.7
2.1.7-beta.1
2.1.6
2.1.5
2.1.4
2.1.3
2.1.2
2.1.1
2.1.0
2.0.8
2.0.7
2.0.6
2.0.6-beta.1
2.0.5
retired
2.0.4
retired
2.0.3
retired
2.0.2
retired
2.0.1
retired
2.0.0
retired
2.0.0-beta.11
2.0.0-beta.10
2.0.0-beta.9
2.0.0-beta.8
2.0.0-beta.7
2.0.0-beta.6
2.0.0-beta.5
2.0.0-beta.4
2.0.0-beta.3
2.0.0-beta.2
2.0.0-beta.1
2.0.0-alpha.7
2.0.0-alpha.6
2.0.0-alpha.5
2.0.0-alpha.4
2.0.0-alpha.3
2.0.0-alpha.2
2.0.0-alpha.1
1.13.5
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.13.0-beta.2
1.13.0-beta.1
1.12.1
1.12.0
1.12.0-beta.3
1.12.0-beta.2
1.12.0-beta.1
1.11.8
1.11.7
1.11.6
1.11.5
1.11.4
1.11.3
1.11.2
1.11.1
1.11.0
1.11.0-beta.1
1.10.13
1.10.12
1.10.11
1.10.10
1.10.9
1.10.8
1.10.7
1.10.6
1.10.5
1.10.4
1.10.3
1.10.2
1.10.1
1.10.0
1.9.4
1.9.3
1.9.2
1.9.1
1.9.1-beta.1
1.9.0
1.9.0-beta.1
1.9.0-alpha.1
1.8.2
1.8.1
1.8.1-beta.2
1.8.1-beta.1
1.8.0
1.7.2
1.7.1
1.7.0
1.7.0-beta.2
1.7.0-beta.1
1.7.0-alpha.4
1.7.0-alpha.3
1.7.0-alpha.2
1.7.0-alpha.1
1.6.7
1.6.6
1.6.6-beta.2
1.6.6-beta.1
1.6.5
1.6.4
1.6.3
1.6.2
1.6.1
1.6.0
1.6.0-beta.1
1.6.0-alpha.1
1.5.1
1.5.0
1.5.0-beta.2
1.5.0-beta.1
1.4.11-beta.1
1.4.10
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.4.0-alpha.1
1.3.6
1.3.6-beta.1
1.3.5
1.3.4
1.3.4-beta.1
1.3.3
1.3.2
1.3.1
1.3.0
1.3.0-beta.3
1.3.0-beta.2
1.3.0-beta.1
1.2.3
1.2.2
1.2.1
1.2.0
1.1.1
1.1.0
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
1.0.0-rc.1
0.13.0
0.12.3
0.12.2
0.12.1
0.12.0
0.11.6
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.2
0.9.1
0.9.0
0.8.0
0.7.1
0.7.0
0.6.2
0.6.1
0.6.0
0.5.0
0.4.0
0.3.0
0.2.0
0.1.0
0.0.9
0.0.8
0.0.7
0.0.6
0.0.5
0.0.4
0.0.3
0.0.2
0.0.1
Collects error and performance data from your Elixir applications and sends it to AppSignal
Current section
280 Versions
Jump to
Current section
280 Versions
Compare versions
13
files changed
+610
additions
-474
deletions
| @@ -1,5 +1,21 @@ | |
| 1 1 | # AppSignal for Elixir changelog |
| 2 2 | |
| 3 | + ## 2.17.0 |
| 4 | + |
| 5 | + _Published on 2026-03-09._ |
| 6 | + |
| 7 | + ### Added |
| 8 | + |
| 9 | + - Add HTTPoison instrumentation. HTTP requests made with HTTPoison will appear as `request.httpoison` events on your performance samples' event timeline. |
| 10 | + |
| 11 | + HTTPoison does not emit telemetry events, so the instrumentation is opt-in. Use `Appsignal.HTTPoison` in place of `HTTPoison` when making requests, or replace `use HTTPoison.Base` with `use Appsignal.HTTPoison.Base` for custom client modules. Response types (`%HTTPoison.Response{}`, `%HTTPoison.Error{}`, etc.) are unchanged. |
| 12 | + |
| 13 | + (minor [f667373a](https://github.com/appsignal/appsignal-elixir/commit/f667373ae7e02ae68f45547bf5a179fc9e0121c0)) |
| 14 | + |
| 15 | + ### Changed |
| 16 | + |
| 17 | + - Bundled certificates have been updated. (patch [16dbdc27](https://github.com/appsignal/appsignal-elixir/commit/16dbdc2718e6618a9fae67db78b2c8482712907d)) |
| 18 | + |
| 3 19 | ## 2.16.0 |
| 4 20 | |
| 5 21 | _Published on 2025-12-01._ |
| @@ -3,10 +3,60 @@ | |
| 3 3 | <<"https://github.com/appsignal/appsignal-elixir/blob/main/CHANGELOG.md">>}, |
| 4 4 | {<<"GitHub">>,<<"https://github.com/appsignal/appsignal-elixir">>}]}. |
| 5 5 | {<<"name">>,<<"appsignal">>}. |
| 6 | - {<<"version">>,<<"2.16.0">>}. |
| 6 | + {<<"version">>,<<"2.17.0">>}. |
| 7 7 | {<<"description">>, |
| 8 8 | <<"Collects error and performance data from your Elixir applications and sends it to AppSignal">>}. |
| 9 9 | {<<"elixir">>,<<"~> 1.9">>}. |
| 10 | + {<<"files">>, |
| 11 | + [<<"lib">>,<<"lib/appsignal.ex">>,<<"lib/appsignal">>, |
| 12 | + <<"lib/appsignal/transaction.ex">>, |
| 13 | + <<"lib/appsignal/transaction_registry.ex">>,<<"lib/appsignal/probes">>, |
| 14 | + <<"lib/appsignal/probes/erlang_probe.ex">>, |
| 15 | + <<"lib/appsignal/probes/probes.ex">>,<<"lib/appsignal/logger">>, |
| 16 | + <<"lib/appsignal/logger/handler.ex">>,<<"lib/appsignal/logger/backend.ex">>, |
| 17 | + <<"lib/appsignal/integration_logger.ex">>,<<"lib/appsignal/tesla.ex">>, |
| 18 | + <<"lib/appsignal/test">>,<<"lib/appsignal/test/wrapper.ex">>, |
| 19 | + <<"lib/appsignal/test/monitor.ex">>,<<"lib/appsignal/test/tracer.ex">>, |
| 20 | + <<"lib/appsignal/test/span.ex">>,<<"lib/appsignal/logger.ex">>, |
| 21 | + <<"lib/appsignal/stacktrace.ex">>,<<"lib/appsignal/ecto_repo.ex">>, |
| 22 | + <<"lib/appsignal/instrumentation.ex">>,<<"lib/appsignal/system.ex">>, |
| 23 | + <<"lib/appsignal/finch.ex">>,<<"lib/appsignal/metadata.ex">>, |
| 24 | + <<"lib/appsignal/monitor.ex">>,<<"lib/appsignal/config.ex">>, |
| 25 | + <<"lib/appsignal/error.ex">>,<<"lib/appsignal/utils">>, |
| 26 | + <<"lib/appsignal/utils/data_encoder.ex">>, |
| 27 | + <<"lib/appsignal/utils/map_filter.ex">>,<<"lib/appsignal/utils/tasks.ex">>, |
| 28 | + <<"lib/appsignal/utils/push_api_key_validator.ex">>, |
| 29 | + <<"lib/appsignal/utils/file_system.ex">>, |
| 30 | + <<"lib/appsignal/utils/hostname.ex">>, |
| 31 | + <<"lib/appsignal/utils/argument_cleaner.ex">>,<<"lib/appsignal/ecto.ex">>, |
| 32 | + <<"lib/appsignal/diagnose">>,<<"lib/appsignal/diagnose/host.ex">>, |
| 33 | + <<"lib/appsignal/diagnose/config.ex">>, |
| 34 | + <<"lib/appsignal/diagnose/library.ex">>, |
| 35 | + <<"lib/appsignal/diagnose/paths.ex">>, |
| 36 | + <<"lib/appsignal/diagnose/report.ex">>, |
| 37 | + <<"lib/appsignal/diagnose/installation_report.ex">>, |
| 38 | + <<"lib/appsignal/diagnose/validation.ex">>, |
| 39 | + <<"lib/appsignal/diagnose/agent.ex">>,<<"lib/appsignal/instrumentation">>, |
| 40 | + <<"lib/appsignal/instrumentation/helpers.ex">>, |
| 41 | + <<"lib/appsignal/instrumentation/decorators.ex">>, |
| 42 | + <<"lib/appsignal/httpoison.ex">>,<<"lib/appsignal/heartbeat.ex">>, |
| 43 | + <<"lib/appsignal/demo.ex">>,<<"lib/appsignal/tracer.ex">>, |
| 44 | + <<"lib/appsignal/nif.ex">>,<<"lib/appsignal/span.ex">>, |
| 45 | + <<"lib/appsignal/absinthe.ex">>,<<"lib/appsignal/oban.ex">>, |
| 46 | + <<"lib/appsignal/check_in">>,<<"lib/appsignal/check_in/cron.ex">>, |
| 47 | + <<"lib/appsignal/check_in/event.ex">>, |
| 48 | + <<"lib/appsignal/check_in/heartbeat.ex">>, |
| 49 | + <<"lib/appsignal/check_in/scheduler.ex">>, |
| 50 | + <<"lib/appsignal/check_in/check_in.ex">>,<<"lib/appsignal/utils.ex">>, |
| 51 | + <<"lib/appsignal/error">>,<<"lib/appsignal/error/backend.ex">>, |
| 52 | + <<"lib/appsignal/transmitter.ex">>,<<"lib/mix">>,<<"lib/mix/tasks">>, |
| 53 | + <<"lib/mix/tasks/appsignal.demo.ex">>, |
| 54 | + <<"lib/mix/tasks/appsignal.install.ex">>, |
| 55 | + <<"lib/mix/tasks/appsignal.check_install.ex">>, |
| 56 | + <<"lib/mix/tasks/appsignal.diagnose.ex">>,<<"c_src/appsignal_extension.c">>, |
| 57 | + <<"mix.exs">>,<<"mix_helpers.exs">>,<<"CHANGELOG.md">>, |
| 58 | + <<"CODE_OF_CONDUCT.md">>,<<"README.md">>,<<"SUPPORT.md">>,<<"LICENSE">>, |
| 59 | + <<"Makefile">>,<<"agent.exs">>,<<"priv/cacert.pem">>]}. |
| 10 60 | {<<"app">>,<<"appsignal">>}. |
| 11 61 | {<<"requirements">>, |
| 12 62 | [[{<<"name">>,<<"castore">>}, |
| @@ -43,54 +93,11 @@ | |
| 43 93 | {<<"app">>,<<"telemetry">>}, |
| 44 94 | {<<"optional">>,false}, |
| 45 95 | {<<"requirement">>,<<"~> 0.4 or ~> 1.0">>}, |
| 96 | + {<<"repository">>,<<"hexpm">>}], |
| 97 | + [{<<"name">>,<<"httpoison">>}, |
| 98 | + {<<"app">>,<<"httpoison">>}, |
| 99 | + {<<"optional">>,true}, |
| 100 | + {<<"requirement">>,<<"~> 2.0">>}, |
| 46 101 | {<<"repository">>,<<"hexpm">>}]]}. |
| 47 | - {<<"files">>, |
| 48 | - [<<"lib">>,<<"lib/appsignal.ex">>,<<"lib/appsignal">>, |
| 49 | - <<"lib/appsignal/transaction.ex">>, |
| 50 | - <<"lib/appsignal/transaction_registry.ex">>,<<"lib/appsignal/probes">>, |
| 51 | - <<"lib/appsignal/probes/erlang_probe.ex">>, |
| 52 | - <<"lib/appsignal/probes/probes.ex">>,<<"lib/appsignal/logger">>, |
| 53 | - <<"lib/appsignal/logger/handler.ex">>,<<"lib/appsignal/logger/backend.ex">>, |
| 54 | - <<"lib/appsignal/integration_logger.ex">>,<<"lib/appsignal/tesla.ex">>, |
| 55 | - <<"lib/appsignal/test">>,<<"lib/appsignal/test/wrapper.ex">>, |
| 56 | - <<"lib/appsignal/test/monitor.ex">>,<<"lib/appsignal/test/tracer.ex">>, |
| 57 | - <<"lib/appsignal/test/span.ex">>,<<"lib/appsignal/logger.ex">>, |
| 58 | - <<"lib/appsignal/stacktrace.ex">>,<<"lib/appsignal/ecto_repo.ex">>, |
| 59 | - <<"lib/appsignal/instrumentation.ex">>,<<"lib/appsignal/system.ex">>, |
| 60 | - <<"lib/appsignal/finch.ex">>,<<"lib/appsignal/metadata.ex">>, |
| 61 | - <<"lib/appsignal/monitor.ex">>,<<"lib/appsignal/config.ex">>, |
| 62 | - <<"lib/appsignal/error.ex">>,<<"lib/appsignal/utils">>, |
| 63 | - <<"lib/appsignal/utils/data_encoder.ex">>, |
| 64 | - <<"lib/appsignal/utils/map_filter.ex">>,<<"lib/appsignal/utils/tasks.ex">>, |
| 65 | - <<"lib/appsignal/utils/push_api_key_validator.ex">>, |
| 66 | - <<"lib/appsignal/utils/file_system.ex">>, |
| 67 | - <<"lib/appsignal/utils/hostname.ex">>, |
| 68 | - <<"lib/appsignal/utils/argument_cleaner.ex">>,<<"lib/appsignal/ecto.ex">>, |
| 69 | - <<"lib/appsignal/diagnose">>,<<"lib/appsignal/diagnose/host.ex">>, |
| 70 | - <<"lib/appsignal/diagnose/config.ex">>, |
| 71 | - <<"lib/appsignal/diagnose/library.ex">>, |
| 72 | - <<"lib/appsignal/diagnose/paths.ex">>, |
| 73 | - <<"lib/appsignal/diagnose/report.ex">>, |
| 74 | - <<"lib/appsignal/diagnose/validation.ex">>, |
| 75 | - <<"lib/appsignal/diagnose/agent.ex">>,<<"lib/appsignal/instrumentation">>, |
| 76 | - <<"lib/appsignal/instrumentation/helpers.ex">>, |
| 77 | - <<"lib/appsignal/instrumentation/decorators.ex">>, |
| 78 | - <<"lib/appsignal/heartbeat.ex">>,<<"lib/appsignal/demo.ex">>, |
| 79 | - <<"lib/appsignal/tracer.ex">>,<<"lib/appsignal/nif.ex">>, |
| 80 | - <<"lib/appsignal/span.ex">>,<<"lib/appsignal/absinthe.ex">>, |
| 81 | - <<"lib/appsignal/oban.ex">>,<<"lib/appsignal/check_in">>, |
| 82 | - <<"lib/appsignal/check_in/cron.ex">>,<<"lib/appsignal/check_in/event.ex">>, |
| 83 | - <<"lib/appsignal/check_in/heartbeat.ex">>, |
| 84 | - <<"lib/appsignal/check_in/scheduler.ex">>, |
| 85 | - <<"lib/appsignal/check_in/check_in.ex">>,<<"lib/appsignal/utils.ex">>, |
| 86 | - <<"lib/appsignal/error">>,<<"lib/appsignal/error/backend.ex">>, |
| 87 | - <<"lib/appsignal/transmitter.ex">>,<<"lib/mix">>,<<"lib/mix/tasks">>, |
| 88 | - <<"lib/mix/tasks/appsignal.demo.ex">>, |
| 89 | - <<"lib/mix/tasks/appsignal.install.ex">>, |
| 90 | - <<"lib/mix/tasks/appsignal.check_install.ex">>, |
| 91 | - <<"lib/mix/tasks/appsignal.diagnose.ex">>,<<"c_src/appsignal_extension.c">>, |
| 92 | - <<"mix.exs">>,<<"mix_helpers.exs">>,<<"CHANGELOG.md">>, |
| 93 | - <<"CODE_OF_CONDUCT.md">>,<<"README.md">>,<<"SUPPORT.md">>,<<"LICENSE">>, |
| 94 | - <<"Makefile">>,<<"agent.exs">>,<<"priv/cacert.pem">>]}. |
| 95 102 | {<<"licenses">>,[<<"MIT">>]}. |
| 96 103 | {<<"build_tools">>,[<<"mix">>,<<"make">>]}. |
| @@ -9,6 +9,11 @@ defmodule Appsignal do | |
| 9 9 | """ |
| 10 10 | |
| 11 11 | @os Application.compile_env(:appsignal, :os_internal, :os) |
| 12 | + @installation_report Application.compile_env( |
| 13 | + :appsignal, |
| 14 | + :appsignal_diagnose_installation_report, |
| 15 | + Appsignal.Diagnose.InstallationReport |
| 16 | + ) |
| 12 17 | |
| 13 18 | use Application |
| 14 19 | alias Appsignal.Config |
| @@ -196,7 +201,7 @@ defmodule Appsignal do | |
| 196 201 | |
| 197 202 | # Parse install report and fetch the architecture and target |
| 198 203 | defp fetch_installed_architecture_target do |
| 199 | - case File.read(Path.join([:code.priv_dir(:appsignal), "install.report"])) do |
| 204 | + case @installation_report.read_install() do |
| 200 205 | {:ok, raw_report} -> |
| 201 206 | case Jason.decode(raw_report) do |
| 202 207 | {:ok, report} -> |
| @@ -120,7 +120,7 @@ defmodule Appsignal.CheckIn.Scheduler do | |
| 120 120 | end |
| 121 121 | |
| 122 122 | @impl true |
| 123 | - def terminate(_reason, %{events: events}) when length(events) > 0 do |
| 123 | + def terminate(_reason, %{events: [_ | _] = events}) do |
| 124 124 | # If any events are stored, attempt to transmit them before the |
| 125 125 | # process is terminated. |
| 126 126 | handle_continue({:transmit, events}, initial_state()) |
| @@ -0,0 +1,20 @@ | |
| 1 | + defmodule Appsignal.Diagnose.InstallationReportBehaviour do |
| 2 | + @moduledoc false |
| 3 | + @callback read_install() :: {:ok, binary()} | {:error, atom()} |
| 4 | + @callback read_download() :: {:ok, binary()} | {:error, atom()} |
| 5 | + end |
| 6 | + |
| 7 | + defmodule Appsignal.Diagnose.InstallationReport do |
| 8 | + @moduledoc false |
| 9 | + @behaviour Appsignal.Diagnose.InstallationReportBehaviour |
| 10 | + |
| 11 | + @spec read_install() :: {:ok, binary()} | {:error, atom()} |
| 12 | + def read_install do |
| 13 | + File.read(Path.join([:code.priv_dir(:appsignal), "install.report"])) |
| 14 | + end |
| 15 | + |
| 16 | + @spec read_download() :: {:ok, binary()} | {:error, atom()} |
| 17 | + def read_download do |
| 18 | + File.read(Path.join([:code.priv_dir(:appsignal), "download.report"])) |
| 19 | + end |
| 20 | + end |
Loading more files…