Current section
Files
Jump to
Current section
Files
src/stats_server.erl
%% Copyright (c) 2014-2016, Kristian Sällberg
%% All rights reserved.
%%
%% Redistribution and use in source and binary forms, with or without
%% modification, are permitted provided that the following conditions are met:
%%
%% * Redistributions of source code must retain the above copyright notice, this
%% list of conditions and the following disclaimer.
%%
%% * Redistributions in binary form must reproduce the above copyright notice,
%% this list of conditions and the following disclaimer in the documentation
%% and/or other materials provided with the distribution.
%%
%% THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
%% AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
%% IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
%% ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
%% LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
%% CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
%% SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
%% INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
%% CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
%% ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
%% OF THE POSSIBILITY OF SUCH DAMAGE.
-module(stats_server).
-author('kristian@purestyle.se').
-behaviour(gen_server).
-include("include/brunhilde.hrl").
-export([start_link/1]).
-export([init/1,
handle_call/3,
handle_cast/2,
handle_info/2,
terminate/2,
code_change/3]).
-define(TIMEOUT, infinity).
-record(state, { connections :: integer()
, server :: term()
}).
-type state() :: #state{}.
start_link(Server) ->
gen_server:start_link(?MODULE, Server, []).
init(Server = #{name := Name}) ->
InitialState = #state{ server = Server
, connections = 0
},
tracker_server:register(Name, self()),
{ok, InitialState}.
handle_cast(inc_connections, #state{connections = Connections} = State) ->
NewState = State#state{connections = Connections + 1},
{noreply, NewState}.
-spec handle_call(get_stats, {pid(), any()}, state()) ->
{reply, integer(), state()}.
handle_call(get_stats, _From, State) ->
{reply, State#state.connections, State}.
-spec handle_info(any(), state() | port()) -> {noreply, state()} |
{stop, normal, state()} |
{noreply, state(), infinity}.
handle_info(_Info, StateData) ->
{noreply, StateData}.
-spec terminate(any(), state()) -> ok.
terminate(_Reason, _) ->
ok.
%% For now, just return the received state data
-spec code_change(atom(), state(), any()) -> {ok, state()}.
code_change(_OldVsn, StateData, _Extra) ->
{ok, StateData}.