diff --git a/apps/astarte_appengine_api/lib/astarte_appengine_api/device/device_status.ex b/apps/astarte_appengine_api/lib/astarte_appengine_api/device/device_status.ex index 4009703bfe..05b6aea284 100644 --- a/apps/astarte_appengine_api/lib/astarte_appengine_api/device/device_status.ex +++ b/apps/astarte_appengine_api/lib/astarte_appengine_api/device/device_status.ex @@ -112,6 +112,10 @@ defmodule Astarte.AppEngine.API.Device.DeviceStatus do # groups_map could be nil, default to empty map groups = Map.keys(groups_map || %{}) + last_connection = truncate_datetime(last_connection) + last_disconnection = truncate_datetime(last_disconnection) + first_registration = truncate_datetime(first_registration) + first_credentials_request = truncate_datetime(first_credentials_request) %DeviceStatus{ id: Device.encode_device_id(device_id), @@ -133,6 +137,9 @@ defmodule Astarte.AppEngine.API.Device.DeviceStatus do } end + defp truncate_datetime(nil), do: nil + defp truncate_datetime(datetime), do: datetime |> DateTime.truncate(:millisecond) + defp ip_string(nil) do nil end diff --git a/apps/astarte_appengine_api/lib/astarte_appengine_api/device/queries.ex b/apps/astarte_appengine_api/lib/astarte_appengine_api/device/queries.ex index 7dfabc0c3b..5ac444bee4 100644 --- a/apps/astarte_appengine_api/lib/astarte_appengine_api/device/queries.ex +++ b/apps/astarte_appengine_api/lib/astarte_appengine_api/device/queries.ex @@ -451,17 +451,26 @@ defmodule Astarte.AppEngine.API.Device.Queries do |> to_string() end - def retrieve_device_status(realm_name, device_id) do + def retrieve_device_for_status(realm_name, device_id) do keyspace = keyspace_name(realm_name) - fields = [:device_id | @device_status_columns_without_device_id] + do_retrieve_device_for_status(keyspace, device_id) + end - query = from(DatabaseDevice, prefix: ^keyspace, select: ^fields) + def retrieve_device_status(realm_name, device_id) do + keyspace = keyspace_name(realm_name) - with {:ok, device} <- Repo.fetch(query, device_id, error: :device_not_found) do + with {:ok, device} <- do_retrieve_device_for_status(keyspace, device_id) do {:ok, build_device_status(keyspace, device)} end end + defp do_retrieve_device_for_status(keyspace, device_id) do + fields = [:device_id | @device_status_columns_without_device_id] + query = from(DatabaseDevice, prefix: ^keyspace, select: ^fields) + + Repo.fetch(query, device_id, error: :device_not_found) + end + defp deletion_in_progress?(keyspace, device_id) do case Repo.fetch(DeletionInProgress, device_id, prefix: keyspace) do {:ok, _} -> true diff --git a/apps/astarte_appengine_api/test/astarte_appengine_api_web/controllers/device_status_by_group_controller_test.exs b/apps/astarte_appengine_api/test/astarte_appengine_api_web/controllers/device_status_by_group_controller_test.exs index 2f8c4fb1c8..db7f2e3fa6 100644 --- a/apps/astarte_appengine_api/test/astarte_appengine_api_web/controllers/device_status_by_group_controller_test.exs +++ b/apps/astarte_appengine_api/test/astarte_appengine_api_web/controllers/device_status_by_group_controller_test.exs @@ -97,25 +97,6 @@ defmodule Astarte.AppEngine.APIWeb.DeviceStatusByGroupControllerTest do "groups" => [@group_name], "deletion_in_progress" => false } - @expected_device_status_long_timestamps %{ - "connected" => false, - "id" => @expected_device_id, - "aliases" => %{"display_name" => "device_a"}, - "introspection" => @expected_introspection, - "last_credentials_request_ip" => "198.51.100.89", - "last_seen_ip" => "198.51.100.81", - "attributes" => %{"attribute_key" => "device_a_attribute"}, - "credentials_inhibited" => false, - "total_received_bytes" => 4_500_000, - "total_received_msgs" => 45000, - "previous_interfaces" => @expected_previous_interfaces, - "groups" => [@group_name], - "deletion_in_progress" => false, - "first_credentials_request" => "2016-08-20T09:44:00.000000Z", - "first_registration" => "2016-08-15T09:44:00.000000Z", - "last_connection" => "2017-09-28T03:45:00.000000Z", - "last_disconnection" => "2017-09-29T18:25:00.000000Z" - } setup_all do {:ok, _client} = DatabaseTestHelper.create_test_keyspace() @@ -189,7 +170,7 @@ defmodule Astarte.AppEngine.APIWeb.DeviceStatusByGroupControllerTest do end assert Enum.find(devices, &(Map.get(&1, "id") == @expected_device_id)) == - @expected_device_status_long_timestamps + @expected_device_status end test "implements pagination correctly", %{conn: conn} do