Skip to content

Commit c317bd5

Browse files
committed
Create a MetricsEndpoint
This fixes a bunch of `force_ssl` issues since this one endpoint can be http only, plus its easy not to expose it to the world
1 parent 3794603 commit c317bd5

File tree

8 files changed

+44
-9
lines changed

8 files changed

+44
-9
lines changed

config/config.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,11 @@ config :nerves_hub, NervesHubWeb.Endpoint,
4848
],
4949
pubsub_server: NervesHub.PubSub
5050

51+
##
52+
# NervesHub Metrics
53+
#
54+
config :nerves_hub, NervesHubWeb.MetricsEndpoint, adapter: Bandit.PhoenixAdapter
55+
5156
##
5257
# Database and Oban
5358
#

config/dev.exs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,11 @@ config :nerves_hub, NervesHubWeb.DeviceEndpoint,
6666
]
6767
]
6868

69+
##
70+
# NervesHub Metrics
71+
#
72+
config :nerves_hub, NervesHubWeb.MetricsEndpoint, http: [ip: {0, 0, 0, 0}, port: 4002]
73+
6974
##
7075
# Database and Oban
7176
#

config/prod.exs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,21 @@ config :phoenix, logger: false
88
##
99
# NervesHub Web
1010
#
11-
config :nerves_hub, NervesHubWeb.Endpoint, server: true
11+
config :nerves_hub, NervesHubWeb.Endpoint,
12+
force_ssl: [rewrite_on: [:x_forwarded_proto]],
13+
server: true
1214

1315
##
1416
# NervesHub Device
1517
#
16-
config :nerves_hub, NervesHubWeb.DeviceEndpoint, server: true
18+
config :nerves_hub, NervesHubWeb.DeviceEndpoint,
19+
force_ssl: [rewrite_on: [:x_forwarded_proto]],
20+
server: true
21+
22+
##
23+
# NervesHub Metrics
24+
#
25+
config :nerves_hub, NervesHubWeb.MetricsEndpoint, server: true
1726

1827
##
1928
# Database and Oban

config/runtime.exs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -168,6 +168,18 @@ if config_env() == :prod do
168168
]
169169
end
170170

171+
web_port = System.get_env("HTTP_PORT") || System.get_env("PORT") || "4000"
172+
173+
metrics_port =
174+
case System.get_env("METRICS_PORT") do
175+
nil -> String.to_integer(web_port) + 40
176+
port -> String.to_integer(port)
177+
end
178+
179+
config :nerves_hub, NervesHubWeb.MetricsEndpoint,
180+
http: [port: metrics_port],
181+
server: true
182+
171183
config :nerves_hub, NervesHubWeb.DeviceSocket,
172184
shared_secrets: [
173185
enabled: System.get_env("DEVICE_SHARED_SECRETS_ENABLED", "false") == "true"

lib/nerves_hub/application.ex

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ defmodule NervesHub.Application do
4141
{Oban, Application.fetch_env!(:nerves_hub, Oban)}
4242
] ++
4343
deployments_supervisor(deploy_env()) ++
44-
endpoints(deploy_env())
44+
endpoints(deploy_env()) ++
45+
[
46+
NervesHubWeb.MetricsEndpoint
47+
]
4548

4649
opts = [strategy: :one_for_one, name: NervesHub.Supervisor]
4750
Supervisor.start_link(children, opts)

lib/nerves_hub_web/device_endpoint.ex

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,6 @@ defmodule NervesHubWeb.DeviceEndpoint do
3333

3434
plug(NervesHubWeb.Plugs.ImAlive)
3535

36-
plug(PromEx.Plug, prom_ex_module: NervesHub.PromEx)
37-
3836
plug(Sentry.PlugContext)
3937

4038
plug(NervesHubWeb.Plugs.Logger)

lib/nerves_hub_web/endpoint.ex

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@ defmodule NervesHubWeb.Endpoint do
1010
signing_salt: "1CPjriVa"
1111
]
1212

13-
plug(PromEx.Plug, prom_ex_module: NervesHub.PromEx)
14-
15-
plug(Plug.SSL, rewrite_on: [:x_forwarded_proto])
16-
1713
socket("/live", Phoenix.LiveView.Socket, websocket: [connect_info: [session: @session_options]])
1814

1915
socket("/socket", NervesHubWeb.UserSocket,
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
defmodule NervesHubWeb.MetricsEndpoint do
2+
use Phoenix.Endpoint, otp_app: :nerves_hub
3+
4+
plug(PromEx.Plug, prom_ex_module: NervesHub.PromEx)
5+
6+
plug(NervesHubWeb.Plugs.DeviceEndpointRedirect)
7+
end

0 commit comments

Comments
 (0)