* Use test matrix from file
* Only check formatting on specific Elixir version
* Use latest patch version of each Elixir/OTP release in test matrix
* Test on Elixir 1.15 and OTP 26
* Run formatter on opentelemetry_httpoison
* Run formatter on opentelemetry_phoenix
* Run formatter on opentelemetry_tesla
* Fix building opentelemetry_ecto on Elixir 1.15
Upgraded deps to fix ssl_verify_fun not compiling
* Fix building opentelemetry_dataloader on Elixir 1.15
Upgraded deps to fix ssl_verify_fun and ecto_sql not compiling
* Upgrade opentelemetry_finch to build on Elixir 1.15
* Upgrade opentelemetry_httpoison deps to build on 1.15
* Upgrade opentelemetry_nebulex to build on Elixir 1.15
* Upgrade opentelemetry_oban to build on Elixir 1.15
* Upgrade opentelemetry_phoenix deps to build on 1.15
* Upgrade opentelemetry_redix deps to build on 1.15
* Fix warning about <> being ambiguous
* Fix assertion on attributes keys
These are always atoms, not strings.
* Upgrade ssl_verify_fun in opentelemetry_telemetry
* Deterministically sort keys before asserting in tests
* Upgrade opentelemetry_process_propogator to build on Elixir 1.15
* Run mix format on opentelemetry_process_propogator
* Assert keys are atoms, not strings
* Use matrix.os to define runs-on parameter
* Pin test matrix to specific OTP + Elixir versions
* Run formatter on telemetry and process_propagator
* Run formatter over opentelemetry_phoenix
---------
Co-authored-by: Tristan Sloughter <t@crashfast.com>
Behave in a similar way to Ecto, which is to attach the context of the
connection, falling back to the calling process context if available.
Co-authored-by: Tristan Sloughter <t@crashfast.com>
returns 500..599.
It is encouraged in the Phoenix docs to use `Plug.Exception` with
custom exceptions to generate for example 404 responses at certain
places. These 404s should not be marked as error, since simple "route
not found" 404s are also not marked as error.
Co-authored-by: Tristan Sloughter <t@crashfast.com>
* Don't record DB statements without sanitizaiton
This adds an option to OpentelemetryEcto.setup/1 that allows a query
sanitization function to be provided. If it is not provided, queries
are not captured (this is the default).
* test that db.statement isnt present unless query sanitizer is configured
* rename option to `:db_statement`
* run mix format
* Optionally disable trace propagation for Tesla
While we always want spans being produced, trace progation is not
desirable in all cases - namely, when calling external parties, as that
may leak sensitive information, like one present on Baggage.
This patch introduces a new option `:propagate`, that defaults to
`true`.
Some tweaks are made to existing propagation test, fixing how options
are used. The approach here is closer to what we see in some middleware
tests of Tesla itself.
* change to propagator override
* change propagator to it uses global default
* mix format
* improve docs
---------
Co-authored-by: Andrew Rosa <dev@andrewhr.io>
* Add source_url_pattern to be able to use the "link to source" button
* Add README.md as an "extra" where it wasn't already
* Add a `main` setting. They all have a very obvious main module. Set
that as `main`, so a user is shown this immediately instead of a list
of usually only this module.
* Improve span_name
Use span_name if provided. Fallback to url.path if there is no
path_params.
* Add unreleased changelog
* Update examples and module description
* Change span_name and http.url to follow OTEL spec
* Remove unused function
* Improve changelog
* Fix reading span_name from request.options
* Don't use URI.path
* address changelog
Add instrumentation for Nebulex, a distributed cache library. This
library provides solid telemetry support for this initial
implementation.
Caching implementation is mostly based on in-memory storage (like ETS)
and RPC calls for distribution (via OTP libraries, like :erpc). AFAICT,
there is not much specifics for how to translate into Semantic
Attributes: those caches are not quite a DB, except maybe for the one
which implements the storage; the RPC can't be reliably captured
either.
Given the above constraints, this initial implementation instruments the
library via custom attributes (namespaced as `nebulex.*`). It's not 100%
clear the behaviour of OTel for actual distributed caches - from my
tests, that may create some orphan spans. I think that's fine as first
release.
Nebulex follow the patterns of Ecto, so this instrumentation follows a
similar pattern of OpentelemetryEcto. It does include a `setup_all/1`
function for convenience, that leverages the :init events Nebulex emit
on process start.
Co-authored-by: Tristan Sloughter <t@crashfast.com>
First one is related to `OpenTelemetry.Ctx` API. I've noticed in a few
scenarios the current span of a trace may get lost after Ecto calls.
Looking at the The `attach/1` typespec, it's a Ctx -> Token, while
`dettach/1` as Token -> Ctx function. That made me assume the expected
input of dettach is the return type of attach. Indeed, after this change
we got the behavior of Ecto calls preserve the parent span untouched.
That leads to a second bug found. When ecto does simple calls within a
Task, due the special propagation code for preloads that means it will
skip the current span, if any. The solution here is to first check the
current process.
One test was added to reproduce this bug.
* Fix CI errors, update GHA deps, update versions
* output syntax
* remove OTP 22 tests
* set concurrency to cancel in progress
* whitespace
* incompatible vsns and failed test
* Try pulling excludes out
* Escaping
* Just drop < 1.13 until this can move to workflows
* quote
* fix remove extra bracket in mix.exs
* use capture log for less verbose test output
* add span_name opt for overriding span name
* add moduledoc
* allow function for span_name opt
Instead of custom attributes, leverage the status description as
described in Semantic Conventions. This approach is taken from current
`opentelemetry_ecto` implementation.
Small non-related change is a fix the license description in `mix.exs`.