lib/telemetry.ex

defmodule Ravix.Telemetry do
  @moduledoc """
     Telemetry events supported by the Ravix Driver

     All the events follow the [:ravix, store_atom] prefix

     In addition to the specific Ravix events, all the Tesla events
     are also propagated
  """

  @doc """
     Fires when a node is selected, can be filtered by the node url
  """
  def node_selected({pid, node}) do
    :telemetry.execute(
      [:ravix, node.store, :node_selected, :count],
      %{count: 1},
      %{node_url: node.url, database: node.database}
    )

    {pid, node}
  end

  @doc """
    Fires when a topology request is requested
  """
  def topology_updated(store) do
    :telemetry.execute(
      [:ravix, store, :topology_updates, :count],
      %{count: 1}
    )
  end

  @doc """
    Fires when a retry is requested, can be filtered by the node url or http status
  """
  def retry_count(node, status) do
    :telemetry.execute(
      [:ravix, node.store, :retries, :count],
      %{count: 1},
      %{node_url: node.url, status: status, database: node.database}
    )
  end

  @doc """
     Fires when a request ends in error, can be filtered by node url or status
  """
  def request_error(node, status) do
    :telemetry.execute(
      [:ravix, node.store, :requests, :error],
      %{count: 1},
      %{node_url: node.url, status: status, database: node.database}
    )
  end

  @doc """
     Fires when there's a request to a stale index, can be filtered by the node url or index name
  """
  def request_stale(node, index_name) do
    :telemetry.execute(
      [:ravix, node.store, :requests, :stale_index],
      %{count: 1},
      %{node_url: node.url, index: index_name, database: node.database}
    )
  end

  @doc """
      Fires when a request ends successfully
  """
  def request_success(node) do
    :telemetry.execute(
      [:ravix, node.store, :requests, :success],
      %{count: 1},
      %{node_url: node.url, database: node.database}
    )
  end

  @doc """
    Fires when a session is started
  """
  def session_started(store) do
    :telemetry.execute(
      [:ravix, store, :session_started, :count],
      %{count: 1}
    )
  end

  @doc """
    Fires when a session is ended
  """
  def session_ended(store) do
    :telemetry.execute(
      [:ravix, store, :session_ended, :count],
      %{count: -1}
    )
  end

  @doc """
    Fires when a session times-out
  """
  def session_timed_out(store) do
    :telemetry.execute(
      [:ravix, store, :session_timed_out, :count],
      %{count: 1}
    )
  end

  @doc """
    Fires when a query is executed
  """
  def query_executed(store) do
    :telemetry.execute(
      [:ravix, store, :query_executed, :count],
      %{count: 1}
    )
  end
end