diff --git a/lib/trento/application/projectors/cluster_projector.ex b/lib/trento/application/projectors/cluster_projector.ex index 08852427d7..7a94d76d28 100644 --- a/lib/trento/application/projectors/cluster_projector.ex +++ b/lib/trento/application/projectors/cluster_projector.ex @@ -196,14 +196,17 @@ defmodule Trento.ClusterProjector do @impl true def after_update(%ClusterRestored{cluster_id: cluster_id}, _, _) do - cluster = Repo.get!(ClusterReadModel, cluster_id) + cluster = + ClusterReadModel + |> Repo.get!(cluster_id) + |> Repo.preload([:tags]) restored_cluster = enrich_cluster_model(cluster) TrentoWeb.Endpoint.broadcast( "monitoring:clusters", "cluster_registered", - ClusterView.render("cluster_registered.json", cluster: restored_cluster) + ClusterView.render("cluster_restored.json", cluster: restored_cluster) ) end diff --git a/lib/trento/application/projectors/database_projector.ex b/lib/trento/application/projectors/database_projector.ex index d74233b7a5..60f3c3bbfa 100644 --- a/lib/trento/application/projectors/database_projector.ex +++ b/lib/trento/application/projectors/database_projector.ex @@ -304,12 +304,15 @@ defmodule Trento.DatabaseProjector do _, _ ) do - database = Repo.get!(DatabaseReadModel, sap_system_id) + database = + DatabaseReadModel + |> Repo.get!(sap_system_id) + |> Repo.preload([:tags]) TrentoWeb.Endpoint.broadcast( @databases_topic, "database_registered", - SapSystemView.render("database_registered.json", database: database) + SapSystemView.render("database_restored.json", database: database) ) end diff --git a/lib/trento/application/projectors/host_projector.ex b/lib/trento/application/projectors/host_projector.ex index 5ac053acab..0104ed5c24 100644 --- a/lib/trento/application/projectors/host_projector.ex +++ b/lib/trento/application/projectors/host_projector.ex @@ -224,12 +224,15 @@ defmodule Trento.HostProjector do _, _ ) do - host = Repo.get!(HostReadModel, id) + host = + HostReadModel + |> Repo.get!(id) + |> Repo.preload([:sles_subscriptions, :tags]) TrentoWeb.Endpoint.broadcast( "monitoring:hosts", "host_registered", - HostView.render("host_registered.json", host: host) + HostView.render("host_restored.json", host: host) ) end diff --git a/lib/trento/application/projectors/sap_system_projector.ex b/lib/trento/application/projectors/sap_system_projector.ex index 9d2406ad69..4a1e164012 100644 --- a/lib/trento/application/projectors/sap_system_projector.ex +++ b/lib/trento/application/projectors/sap_system_projector.ex @@ -337,12 +337,15 @@ defmodule Trento.SapSystemProjector do _, _ ) do - sap_system = Repo.get!(SapSystemReadModel, sap_system_id) + sap_system = + SapSystemReadModel + |> Repo.get!(sap_system_id) + |> Repo.preload([:tags]) TrentoWeb.Endpoint.broadcast( @sap_systems_topic, "sap_system_registered", - SapSystemView.render("sap_system_registered.json", sap_system: sap_system) + SapSystemView.render("sap_system_restored.json", sap_system: sap_system) ) end diff --git a/lib/trento_web/views/v1/host_view.ex b/lib/trento_web/views/v1/host_view.ex index 7bdab56a1d..1e1d171dec 100644 --- a/lib/trento_web/views/v1/host_view.ex +++ b/lib/trento_web/views/v1/host_view.ex @@ -26,6 +26,10 @@ defmodule TrentoWeb.V1.HostView do |> Map.delete(:tags) end + def render("host_restored.json", %{host: host}) do + render("host.json", %{host: host}) + end + def render("heartbeat_result.json", %{host: %{id: id, hostname: hostname}}) do %{id: id, hostname: hostname} end diff --git a/lib/trento_web/views/v1/sap_system_view.ex b/lib/trento_web/views/v1/sap_system_view.ex index a010b936a3..80eab95f3f 100644 --- a/lib/trento_web/views/v1/sap_system_view.ex +++ b/lib/trento_web/views/v1/sap_system_view.ex @@ -36,6 +36,13 @@ defmodule TrentoWeb.V1.SapSystemView do |> Map.delete(:database_instances) end + def render("database_restored.json", %{database: database}) do + database + |> Map.from_struct() + |> Map.delete(:__meta__) + |> Map.delete(:database_instances) + end + def render("database_health_changed.json", %{health: health}), do: health def render("database_instance_health_changed.json", %{ @@ -124,6 +131,14 @@ defmodule TrentoWeb.V1.SapSystemView do |> Map.delete(:tags) end + def render("sap_system_restored.json", %{sap_system: sap_system}) do + sap_system + |> Map.from_struct() + |> Map.delete(:__meta__) + |> Map.delete(:database_instances) + |> Map.delete(:application_instances) + end + def render("sap_system_updated.json", %{id: id, ensa_version: ensa_version}), do: %{id: id, ensa_version: ensa_version} diff --git a/lib/trento_web/views/v2/cluster_view.ex b/lib/trento_web/views/v2/cluster_view.ex index c4361982d4..5d9185965b 100644 --- a/lib/trento_web/views/v2/cluster_view.ex +++ b/lib/trento_web/views/v2/cluster_view.ex @@ -15,6 +15,10 @@ defmodule TrentoWeb.V2.ClusterView do Map.delete(render("cluster.json", %{cluster: cluster}), :tags) end + def render("cluster_restored.json", %{cluster: cluster}) do + render("cluster.json", %{cluster: cluster}) + end + def render("cluster_details_updated.json", %{data: data}) do data |> Map.from_struct() diff --git a/test/trento/application/projectors/cluster_projector_test.exs b/test/trento/application/projectors/cluster_projector_test.exs index c3eb4ca575..d875f2f359 100644 --- a/test/trento/application/projectors/cluster_projector_test.exs +++ b/test/trento/application/projectors/cluster_projector_test.exs @@ -210,16 +210,22 @@ defmodule Trento.ClusterProjectorTest do test "should set deregistered_at field to nil when ClusterRestored is received" do %{id: cluster_id, name: name, type: type} = insert(:cluster, - id: Faker.UUID.v4(), name: "deregistered_cluster", selected_checks: [], deregistered_at: DateTime.utc_now() ) + insert_list(5, :tag, resource_id: cluster_id) + event = ClusterRestored.new!(%{cluster_id: cluster_id}) ProjectorTestHelper.project(ClusterProjector, event, "cluster_projector") - cluster_projection = Repo.get!(ClusterReadModel, event.cluster_id) + + %{tags: tags} = + cluster_projection = + ClusterReadModel + |> Repo.get!(event.cluster_id) + |> Repo.preload([:tags]) assert nil == cluster_projection.deregistered_at @@ -228,7 +234,8 @@ defmodule Trento.ClusterProjectorTest do cib_last_written: nil, id: ^cluster_id, name: ^name, - type: ^type + type: ^type, + tags: ^tags }, 1000 end diff --git a/test/trento/application/projectors/database_projector_test.exs b/test/trento/application/projectors/database_projector_test.exs index 9f76bb4daa..d372ebf02d 100644 --- a/test/trento/application/projectors/database_projector_test.exs +++ b/test/trento/application/projectors/database_projector_test.exs @@ -308,12 +308,14 @@ defmodule Trento.DatabaseProjectorTest do end test "should restore a deregistered database when DatabaseRestored is received" do - insert(:database, - id: sap_system_id = Faker.UUID.v4(), - sid: "NWD", - deregistered_at: DateTime.utc_now(), - health: :critical - ) + %{id: sap_system_id} = + insert(:database, + sid: "NWD", + deregistered_at: DateTime.utc_now(), + health: :critical + ) + + insert_list(5, :tag, resource_id: sap_system_id) event = %DatabaseRestored{ sap_system_id: sap_system_id, @@ -322,7 +324,12 @@ defmodule Trento.DatabaseProjectorTest do ProjectorTestHelper.project(DatabaseProjector, event, "database_projector") - projection = Repo.get(DatabaseReadModel, sap_system_id) + %{tags: tags} = + projection = + DatabaseReadModel + |> Repo.get(sap_system_id) + |> Repo.preload([:tags]) + assert nil == projection.deregistered_at assert :passing == projection.health @@ -330,7 +337,8 @@ defmodule Trento.DatabaseProjectorTest do %{ health: :passing, id: ^sap_system_id, - sid: "NWD" + sid: "NWD", + tags: ^tags }, 1000 end diff --git a/test/trento/application/projectors/host_projector_test.exs b/test/trento/application/projectors/host_projector_test.exs index bd37eaeb0d..b5cd403776 100644 --- a/test/trento/application/projectors/host_projector_test.exs +++ b/test/trento/application/projectors/host_projector_test.exs @@ -414,8 +414,14 @@ defmodule Trento.HostProjectorTest do end test "should set deregistered_at to nil when HostRestored is received" do - host_id = UUID.uuid4() - insert(:host, id: host_id, deregistered_at: DateTime.utc_now()) + %{id: host_id} = + insert( + :host, + deregistered_at: DateTime.utc_now() + ) + + insert_list(5, :tag, resource_id: host_id) + insert_list(5, :sles_subscription, host_id: host_id) event = %HostRestored{ host_id: host_id @@ -432,8 +438,13 @@ defmodule Trento.HostProjectorTest do cluster_id: cluster_id, provider: provider, provider_data: provider_data, - deregistered_at: deregistered_at - } = Repo.get!(HostReadModel, host_id) + deregistered_at: deregistered_at, + sles_subscriptions: sles_subscriptions, + tags: tags + } = + HostReadModel + |> Repo.get!(host_id) + |> Repo.preload([:sles_subscriptions, :tags]) assert nil == deregistered_at @@ -446,7 +457,9 @@ defmodule Trento.HostProjectorTest do id: ^id, ip_addresses: ^ip_addresses, provider: ^provider, - provider_data: ^provider_data + provider_data: ^provider_data, + sles_subscriptions: ^sles_subscriptions, + tags: ^tags }, 1000 end diff --git a/test/trento/application/projectors/sap_system_projector_test.exs b/test/trento/application/projectors/sap_system_projector_test.exs index f586ac7d98..9646056371 100644 --- a/test/trento/application/projectors/sap_system_projector_test.exs +++ b/test/trento/application/projectors/sap_system_projector_test.exs @@ -240,6 +240,8 @@ defmodule Trento.SapSystemProjectorTest do %{tenant: tenant, id: sap_system_id, sid: sid} = insert(:sap_system, deregistered_at: DateTime.utc_now()) + insert_list(5, :tag, resource_id: sap_system_id) + new_db_host = Faker.Internet.ip_v4_address() new_health = :passing @@ -252,7 +254,11 @@ defmodule Trento.SapSystemProjectorTest do ProjectorTestHelper.project(SapSystemProjector, event, "sap_system_projector") - projection = Repo.get(SapSystemReadModel, sap_system_id) + %{tags: tags} = + projection = + SapSystemReadModel + |> Repo.get(sap_system_id) + |> Repo.preload([:tags]) assert_broadcast( "sap_system_registered", @@ -261,7 +267,8 @@ defmodule Trento.SapSystemProjectorTest do health: ^new_health, id: ^sap_system_id, sid: ^sid, - tenant: ^tenant + tenant: ^tenant, + tags: ^tags }, 1000 )