Skip to content

Commit 0f50ba2

Browse files
committed
chore!(ecto): move SELECT queries to ecto
Changes `SELECT` queries to use ecto and exandra. Signed-off-by: Luca Zaninotto <luca.zaninotto@secomind.com>
1 parent f50a0d1 commit 0f50ba2

File tree

6 files changed

+330
-485
lines changed

6 files changed

+330
-485
lines changed

apps/astarte_realm_management/lib/astarte_realm_management/engine.ex

Lines changed: 24 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,11 @@ defmodule Astarte.RealmManagement.Engine do
4444
def get_health() do
4545
_ = Logger.debug("Get health.")
4646

47-
with {:ok, client} <- Database.connect(),
48-
:ok <- Queries.check_astarte_health(client, :quorum) do
47+
with :ok <- Queries.check_astarte_health(:quorum) do
4948
{:ok, %{status: :ready}}
5049
else
5150
{:error, :health_check_bad} ->
52-
with {:ok, client} <- Database.connect(),
53-
:ok <- Queries.check_astarte_health(client, :one) do
51+
with :ok <- Queries.check_astarte_health(:one) do
5452
{:ok, %{status: :degraded}}
5553
else
5654
{:error, :health_check_bad} ->
@@ -76,8 +74,8 @@ defmodule Astarte.RealmManagement.Engine do
7674
interface_descriptor <- InterfaceDescriptor.from_interface(interface_doc),
7775
%InterfaceDescriptor{name: name, major_version: major} <- interface_descriptor,
7876
{:interface_avail, {:ok, false}} <-
79-
{:interface_avail, Queries.is_interface_major_available?(client, name, major)},
80-
:ok <- Queries.check_interface_name_collision(client, name),
77+
{:interface_avail, Queries.is_interface_major_available?(realm_name, name, major)},
78+
:ok <- Queries.check_interface_name_collision(realm_name, name),
8179
{:ok, automaton} <- EndpointsAutomaton.build(interface_doc.mappings) do
8280
_ =
8381
Logger.info("Installing interface.",
@@ -142,7 +140,7 @@ defmodule Astarte.RealmManagement.Engine do
142140
interface_descriptor <- InterfaceDescriptor.from_interface(interface_doc),
143141
%InterfaceDescriptor{name: name, major_version: major} <- interface_descriptor,
144142
{:interface_avail, {:ok, true}} <-
145-
{:interface_avail, Queries.is_interface_major_available?(client, name, major)},
143+
{:interface_avail, Queries.is_interface_major_available?(realm_name, name, major)},
146144
{:ok, installed_interface} <-
147145
Interface.fetch_interface_descriptor(realm_name, name, major),
148146
:ok <- error_on_incompatible_descriptor(installed_interface, interface_descriptor),
@@ -379,12 +377,12 @@ defmodule Astarte.RealmManagement.Engine do
379377
with {:major, 0} <- {:major, major},
380378
{:ok, client} <- Database.connect(realm: realm_name),
381379
{:major_is_avail, {:ok, true}} <-
382-
{:major_is_avail, Queries.is_interface_major_available?(client, name, 0)},
380+
{:major_is_avail, Queries.is_interface_major_available?(realm_name, name, 0)},
383381
{:devices, {:ok, false}} <-
384-
{:devices, Queries.is_any_device_using_interface?(client, name)},
382+
{:devices, Queries.is_any_device_using_interface?(realm_name, name)},
385383
interface_id = CQLUtils.interface_id(name, major),
386384
{:triggers, {:ok, false}} <-
387-
{:triggers, Queries.has_interface_simple_triggers?(client, interface_id)} do
385+
{:triggers, Queries.has_interface_simple_triggers?(realm_name, interface_id)} do
388386
if opts[:async] do
389387
# TODO: add _ = Logger.metadata(realm: realm_name)
390388
Task.start_link(Engine, :execute_interface_deletion, [client, realm_name, name, major])
@@ -417,7 +415,7 @@ defmodule Astarte.RealmManagement.Engine do
417415
def execute_interface_deletion(client, realm_name, name, major) do
418416
with {:ok, interface_row} <- Interface.retrieve_interface_row(realm_name, name, major),
419417
{:ok, descriptor} <- InterfaceDescriptor.from_db_result(interface_row),
420-
:ok <- Queries.delete_interface_storage(client, descriptor),
418+
:ok <- Queries.delete_interface_storage(client, descriptor, realm_name),
421419
:ok <- Queries.delete_devices_with_data_on_interface(client, name) do
422420
_ =
423421
Logger.info("Interface deletion started.",
@@ -437,38 +435,21 @@ defmodule Astarte.RealmManagement.Engine do
437435
interface_major: major_version
438436
)
439437

440-
with {:ok, client} <- Database.connect(realm: realm_name),
441-
{:ok, interface} <- Queries.fetch_interface(client, interface_name, major_version) do
438+
with {:ok, interface} <- Queries.fetch_interface(realm_name, interface_name, major_version) do
442439
Jason.encode(interface)
443440
end
444441
end
445442

446443
def list_interface_versions(realm_name, interface_name) do
447444
_ = Logger.debug("List interface versions.", interface: interface_name)
448445

449-
with {:ok, client} <- Database.connect(realm: realm_name) do
450-
Queries.interface_available_versions(client, interface_name)
451-
else
452-
{:error, :database_connection_error} ->
453-
{:error, :realm_not_found}
454-
455-
{:error, reason} ->
456-
{:error, reason}
457-
end
446+
Queries.interface_available_versions(realm_name, interface_name)
458447
end
459448

460449
def get_interfaces_list(realm_name) do
461450
_ = Logger.debug("Get interfaces list.")
462451

463-
with {:ok, client} <- Database.connect(realm: realm_name) do
464-
Queries.get_interfaces_list(client)
465-
else
466-
{:error, :database_connection_error} ->
467-
{:error, :realm_not_found}
468-
469-
{:error, reason} ->
470-
{:error, reason}
471-
end
452+
Queries.get_interfaces_list(realm_name)
472453
end
473454

474455
def get_jwt_public_key_pem(realm_name) do
@@ -516,14 +497,14 @@ defmodule Astarte.RealmManagement.Engine do
516497

517498
with {:ok, client} <- get_database_client(realm_name),
518499
{:exists?, {:error, :trigger_not_found}} <-
519-
{:exists?, Queries.retrieve_trigger_uuid(client, trigger_name)},
500+
{:exists?, Queries.retrieve_trigger_uuid(realm_name, trigger_name)},
520501
simple_trigger_maps = build_simple_trigger_maps(serialized_tagged_simple_triggers),
521502
trigger = build_trigger(trigger_name, trigger_policy_name, simple_trigger_maps, action),
522503
%Trigger{trigger_uuid: trigger_uuid} = trigger,
523504
{:ok, action_map} <- Jason.decode(action),
524505
trigger_target = target_from_action(action_map, trigger_uuid),
525506
t_container = build_trigger_target_container(trigger_target),
526-
:ok <- validate_simple_triggers(client, simple_trigger_maps),
507+
:ok <- validate_simple_triggers(realm_name, simple_trigger_maps),
527508
# TODO: these should be batched together
528509
:ok <- install_simple_triggers(client, simple_trigger_maps, trigger_uuid, t_container),
529510
:ok <- install_trigger_policy_link(client, trigger_uuid, trigger_policy_name) do
@@ -617,12 +598,12 @@ defmodule Astarte.RealmManagement.Engine do
617598
}
618599
end
619600

620-
defp validate_simple_triggers(client, simple_trigger_maps) do
601+
defp validate_simple_triggers(realm_name, simple_trigger_maps) do
621602
Enum.reduce_while(simple_trigger_maps, :ok, fn
622603
%{simple_trigger: simple_trigger_container}, _acc ->
623604
%SimpleTriggerContainer{simple_trigger: {_tag, simple_trigger}} = simple_trigger_container
624605

625-
case validate_simple_trigger(client, simple_trigger) do
606+
case validate_simple_trigger(realm_name, simple_trigger) do
626607
:ok ->
627608
{:cont, :ok}
628609

@@ -637,7 +618,7 @@ defmodule Astarte.RealmManagement.Engine do
637618
:ok
638619
end
639620

640-
defp validate_simple_trigger(client, %DataTrigger{} = data_trigger) do
621+
defp validate_simple_trigger(realm_name, %DataTrigger{} = data_trigger) do
641622
%DataTrigger{
642623
interface_name: interface_name,
643624
interface_major: interface_major,
@@ -646,8 +627,9 @@ defmodule Astarte.RealmManagement.Engine do
646627
data_trigger_type: data_trigger_type
647628
} = data_trigger
648629

649-
# This will fail with {:error, :interface_not_found} if the interface does not exist
650-
with {:ok, interface} <- Queries.fetch_interface(client, interface_name, interface_major) do
630+
# This should fail with {:error, :interface_not_found} if the interface does not exist
631+
with {:ok, interface} <-
632+
Queries.fetch_interface(realm_name, interface_name, interface_major) do
651633
case interface.aggregation do
652634
:individual ->
653635
cond do
@@ -734,7 +716,7 @@ defmodule Astarte.RealmManagement.Engine do
734716
_ = Logger.debug("Get trigger.", trigger_name: trigger_name)
735717

736718
with {:ok, client} <- get_database_client(realm_name),
737-
{:ok, %Trigger{} = trigger} <- Queries.retrieve_trigger(client, trigger_name) do
719+
{:ok, %Trigger{} = trigger} <- Queries.retrieve_trigger(client, trigger_name, realm_name) do
738720
%Trigger{
739721
trigger_uuid: parent_uuid,
740722
simple_triggers_uuids: simple_triggers_uuids
@@ -779,16 +761,14 @@ defmodule Astarte.RealmManagement.Engine do
779761
def get_triggers_list(realm_name) do
780762
_ = Logger.debug("Get triggers list.")
781763

782-
with {:ok, client} <- get_database_client(realm_name) do
783-
Queries.get_triggers_list(client)
784-
end
764+
Queries.get_triggers_list(realm_name)
785765
end
786766

787767
def delete_trigger(realm_name, trigger_name) do
788768
_ = Logger.info("Going to delete trigger.", trigger_name: trigger_name, tag: "delete_trigger")
789769

790770
with {:ok, client} <- get_database_client(realm_name),
791-
{:ok, trigger} <- Queries.retrieve_trigger(client, trigger_name) do
771+
{:ok, trigger} <- Queries.retrieve_trigger(client, trigger_name, realm_name) do
792772
_ =
793773
Logger.info("Deleting trigger.",
794774
trigger_name: trigger_name,
@@ -804,7 +784,7 @@ defmodule Astarte.RealmManagement.Engine do
804784
Queries.delete_trigger_policy_link(client, trigger.trigger_uuid, trigger.policy) == :ok
805785

806786
if delete_all_simple_triggers_succeeded and delete_policy_link_succeeded do
807-
Queries.delete_trigger(client, trigger_name)
787+
Queries.delete_trigger(client, trigger_name, realm_name)
808788
else
809789
Logger.warning("Failed to delete trigger.",
810790
trigger_name: trigger_name,

0 commit comments

Comments
 (0)