defmodule OpentelemetryHeroku do @moduledoc """ Implements an `OpenTelemetry` resource detector for Heroku. Exposes Heroku environment variables as an `OpenTelemetry` resource, using the semantic conventions defined in the `OpenTelemetry` [spec](https://opentelemetry.io/docs/specs/otel/resource/semantic_conventions/cloud_provider/heroku/). ## Usage: Add this module to the config: ```elixir config :opentelemetry, resource_detectors: [OpentelemetryHeroku] ``` """ require OpenTelemetry.SemanticConventions.Resource alias OpenTelemetry.SemanticConventions.Resource @behaviour :otel_resource_detector def get_resource(_) do [ {Resource.cloud_provider(), "heroku"}, {Resource.service_name(), System.get_env("HEROKU_APP_NAME")}, {Resource.service_instance_id(), System.get_env("HEROKU_DYNO_ID")}, {Resource.service_version(), System.get_env("HEROKU_RELEASE_VERSION")}, {:"heroku.app.id", System.get_env("HEROKU_APP_ID")}, {:"heroku.release.creation_timestamp", System.get_env("HEROKU_RELEASE_CREATED_AT")}, {:"heroku.release.commit", System.get_env("HEROKU_SLUG_COMMIT")} ] |> :otel_resource.create() end end