Skip to content

Commit f7118b2

Browse files
committed
Add support for when a device disconnects
1 parent d7c0dbd commit f7118b2

File tree

2 files changed

+26
-3
lines changed

2 files changed

+26
-3
lines changed

lib/nerves_hub/rpc/device_auth.ex

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,28 @@ defmodule NervesHub.RPC.DeviceAuth do
5252
end
5353
end
5454

55+
def disconnect_device({:error, {:shutdown, :disconnected}}, device, reference_id) do
56+
:telemetry.execute([:nerves_hub, :devices, :duplicate_connection], %{count: 1}, %{
57+
ref_id: reference_id,
58+
device: device
59+
})
60+
61+
disconnect_device(:ok, device, reference_id)
62+
end
63+
64+
def disconnect_device(_, device, reference_id) do
65+
:telemetry.execute([:nerves_hub, :devices, :disconnect], %{count: 1}, %{
66+
ref_id: reference_id,
67+
identifier: device.identifier
68+
})
69+
70+
{:ok, _device_connection} = Connections.device_disconnected(reference_id)
71+
72+
Tracker.offline(device)
73+
74+
:ok
75+
end
76+
5577
defp on_connect(%Device{status: :registered} = device) do
5678
Devices.set_as_provisioned!(device)
5779
|> on_connect()

lib/nerves_hub_web/channels/device_socket.ex

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,6 @@ defmodule NervesHubWeb.DeviceSocket do
66

77
alias NervesHub.Devices.Connections
88

9-
alias NervesHub.Tracker
10-
119
alias NervesHub.RPC.DeviceAuth
1210

1311
channel("console", NervesHubWeb.ConsoleChannel)
@@ -19,7 +17,8 @@ defmodule NervesHubWeb.DeviceSocket do
1917
@impl Phoenix.Socket.Transport
2018
@decorate with_span("Channels.DeviceSocket.terminate")
2119
def terminate(reason, {_channels_info, socket} = state) do
22-
on_disconnect(reason, socket)
20+
%{assigns: %{device: device, reference_id: reference_id}} = socket
21+
DeviceAuth.disconnect_device(reason, device, reference_id)
2322
super(reason, state)
2423
end
2524

@@ -114,6 +113,7 @@ defmodule NervesHubWeb.DeviceSocket do
114113
@decorate with_span("Channels.DeviceSocket.on_disconnect")
115114
defp on_disconnect(exit_reason, socket)
116115

116+
@decorate with_span("Channels.DeviceSocket.on_disconnect")
117117
defp on_disconnect({:error, reason}, %{
118118
assigns: %{
119119
device: device,
@@ -132,6 +132,7 @@ defmodule NervesHubWeb.DeviceSocket do
132132
:ok
133133
end
134134

135+
@decorate with_span("Channels.DeviceSocket.on_disconnect")
135136
defp on_disconnect(_, %{
136137
assigns: %{
137138
device: device,

0 commit comments

Comments
 (0)