Current section
Files
Jump to
Current section
Files
lib/kitto.ex
defmodule Kitto do
use Application
require Logger
@defaults %{ip: {127, 0, 0, 1}, port: 4000}
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [supervisor(__MODULE__, [], function: :start_server),
supervisor(Kitto.Notifier, []),
worker(Kitto.StatsServer, []),
supervisor(Kitto.Runner, [])]
Supervisor.start_link(children, [strategy: :one_for_one, name: Kitto.Supervisor])
end
def start_server do
Logger.info "Starting Kitto server, listening on #{ip_human(ip)}:#{port}"
{ :ok, _pid } = Plug.Adapters.Cowboy.http(Kitto.Router, [], ip: ip, port: port)
end
@doc """
Returns the root path of the dashboard project
"""
def root, do: Application.get_env :kitto, :root
@doc """
Returns the binding ip of the assets watcher server
"""
def asset_server_host, do: Application.get_env :kitto, :assets_host, "127.0.0.1"
@doc """
Returns the binding port of the assets watcher server
"""
def asset_server_port, do: Application.get_env :kitto, :assets_port, 8080
defp ip, do: ip(Application.get_env(:kitto, :ip, @defaults.ip))
defp ip({:system, var}) do
case System.get_env(var) do
nil ->
Logger.error "Configured binding ip via #{var} but no value is set"
exit(:shutdown)
address -> address
|> String.split(".")
|> Enum.map(&String.to_integer/1)
|> List.to_tuple
end
end
defp ip(address) when is_tuple(address), do: address
defp ip(_), do: @defaults.ip
defp ip_human(tup), do: tup |> Tuple.to_list |> Enum.join(".")
defp port, do: port(Application.get_env(:kitto, :port))
defp port({:system, var}), do: System.get_env(var) |> Integer.parse |> elem(0)
defp port(p) when is_integer(p), do: p
defp port(_), do: @defaults.port
end