Packages
wobserverfork
0.1.9
Web based metrics, monitoring, and observer (a temporary fork, not recommended for public use)
Current section
Files
Jump to
Current section
Files
lib/wobserver/application.ex
defmodule Wobserver.Application do
@moduledoc ~S"""
Sets up the main routers with Cowboy.
"""
use Application
alias Plug.Adapters.Cowboy
alias Wobserver.Page
alias Wobserver.Util.Metrics
@doc ~S"""
The port the application uses.
"""
@spec port :: integer
def port do
Application.get_env(:wobserver, :port, 4001)
end
@doc ~S"""
Starts `wobserver`.
The option `:mode` is used to determine how to start `wobserver`.
The following values are possible:
- `:standalone`, starts a supervisor that supervises cowboy.
- `:plug`, passes the Agent storage of the metrics back as pid, without starting any extra processes.
In `:plug` mode no cowboy/ranch server is started, so the `wobserver` router will need to be called from somewhere else.
**Note:** both `type` and `args` are unused.
"""
@spec start(term, term) ::
{:ok, pid} |
{:ok, pid, state :: any} |
{:error, reason :: term}
def start(_type, _args) do
# Load pages and metrics from config
Page.load_config
Metrics.load_config
# Start cowboy
case supervisor_children() do
[] ->
# Return the metric storage if we're not going to start an application.
{:ok, Process.whereis(:wobserver_metrics)}
children ->
import Supervisor.Spec, warn: false
opts = [strategy: :one_for_one, name: Wobserver.Supervisor]
Supervisor.start_link(children, opts)
end
end
defp supervisor_children do
case Application.get_env(:wobserver, :mode, :standalone) do
:standalone ->
[
cowboy_child_spec(),
]
:plug ->
[]
end
end
defp cowboy_child_spec do
options = [
# Options
acceptors: 10,
port: Wobserver.Application.port,
dispatch: [
{:_, [
{"/ws", Wobserver.Web.Client, []},
{:_, Cowboy.Handler, {Wobserver.Web.Router, []}}
]}
],
]
Cowboy.child_spec(:http, Wobserver.Web.Router, [], options)
end
end