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