Packages

Error tracking and reporting to a Telegram chat (group or channel) using Tower.

Current section

Files

Jump to
tower_telegram lib tower_telegram reporter.ex
Raw

lib/tower_telegram/reporter.ex

defmodule TowerTelegram.Reporter do
@moduledoc false
@default_level :error
def report_event(%Tower.Event{level: level} = event) do
if Tower.equal_or_greater_level?(level, level()),
do: do_report_event(event)
end
def do_report_event(%Tower.Event{} = e) do
Telegex.send_message(
chat_id(),
build_message(e),
parse_mode: "markdown"
)
:ok
end
defp build_message(%Tower.Event{
kind: kind,
reason: exception,
stacktrace: stacktrace
}) do
"""
Tower received an error of kind `#{kind}`.
*Reason*:
```elixir
#{inspect(exception)}
```
*Stacktrace*:
```elixir
#{inspect(stacktrace)}
```
#{include_hashtags(kind)}
"""
end
defp include_hashtags(kind), do: "#tower\\_report #tower\\_type\\_#{kind}"
defp level(), do: Application.get_env(:tower_telegram, :level, @default_level)
defp chat_id(), do: Application.get_env(:tower_telegram, :chat_id)
end