Created
July 1, 2020 10:53
-
-
Save s3cur3/d0e5190947315b8b903d693f2d565353 to your computer and use it in GitHub Desktop.
Sample gauge usage for AppSignal
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
defmodule MmoServer.WorldCache do | |
@moduledoc "A cache of all aircraft in the world, intermittently updated for 'flight tracker' API usage" | |
use GenServer | |
require Logger | |
import Appsignal, only: [set_gauge: 2] | |
def start_link(_), do: GenServer.start_link(__MODULE__, %{}, name: __MODULE__) | |
# Log a new connected user | |
def put(%{session_id: sid, lon: lon, lat: lat} = acf) when is_integer(sid) do | |
GenServer.call(__MODULE__, {:put, sid, {lon, lat, Map.get(acf, :elevation_m_amsl, 0), Map.get(acf, :heading_deg, 0)}}) | |
end | |
# Delete our record of a previously connected user | |
def drop(%{session_id: sid}) when is_integer(sid) do | |
GenServer.call(__MODULE__, {:drop, sid}) | |
end | |
# Just the count of the number of connected users | |
def count, do: GenServer.call(__MODULE__, :count) | |
################ Server Implementation ################ | |
@impl GenServer | |
def init(state) do | |
:timer.send_after(60 * 1_000, :stats_once_per_min) | |
{:ok, state} | |
end | |
@impl GenServer | |
def handle_call(:count, _from, state), do: {:reply, map_size(state), state} | |
@impl GenServer | |
def handle_call({:put, session_id, lon_lat_ele}, _from, state) do | |
{:reply, :ok, Map.put(state, session_id, lon_lat_ele)} | |
end | |
@impl GenServer | |
def handle_call({:drop, session_id}, _from, state) when is_integer(session_id) do | |
{:reply, :ok, Map.delete(state, session_id)} | |
end | |
@impl GenServer | |
def handle_info(:stats_once_per_min, state) do | |
Logger.info("Users online: #{map_size(state)}") | |
set_gauge("users_online", map_size(state)) | |
:timer.send_after(60 * 1_000, :stats_once_per_min) | |
{:noreply, state} | |
end | |
end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment