Packages
meta_pid_request
0.2.1
MetaPidRequest provides an OTP application for keeping track of meta data associated with requests.
Current section
Files
Jump to
Current section
Files
lib/meta_pid_request.ex
defmodule MetaPidRequest do
use Application
alias MetaPidRequest.{Registry, RequestMetadata, Supervisor}
def start(_type, _args) do
Supervisor.start_link()
end
@spec register_request(pid(), String.t) :: atom()
def register_request(pid, request_id) do
data = %RequestMetadata{
request_id: request_id,
start_time: System.monotonic_time()
}
Registry.register_pid(pid, data)
end
@spec fetch_metadata(pid()) :: {:ok, RequestMetadata.t} | :error
def fetch_metadata(pid) do
Registry.fetch_pid(pid)
end
@spec fetch_request_id(pid()) :: String.t | nil
def fetch_request_id(pid) do
case fetch_metadata(pid) do
{:ok, metadata} -> metadata.request_id
_ -> nil
end
end
@spec add_time(pid(), atom(), number) :: atom()
def add_time(pid, key, value) do
Registry.transform_pid(pid, fn (metadata) ->
RequestMetadata.add_time(metadata, key, value)
end)
end
end