From ea066c8742104351e279b731c13779851c2a8036 Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Fri, 12 Jul 2024 15:12:35 +0200 Subject: [PATCH 1/9] feat: Add measurements for app deployment --- apps/lenra/lib/lenra/apps.ex | 13 +++++++---- apps/lenra/lib/monitor.ex | 45 ++++++++++++++++++++++++++++++++++++ 2 files changed, 53 insertions(+), 5 deletions(-) create mode 100644 apps/lenra/lib/monitor.ex diff --git a/apps/lenra/lib/lenra/apps.ex b/apps/lenra/lib/lenra/apps.ex index 70599a00..bfbcee49 100644 --- a/apps/lenra/lib/lenra/apps.ex +++ b/apps/lenra/lib/lenra/apps.ex @@ -334,6 +334,8 @@ defmodule Lenra.Apps do end def deploy_in_main_env(%Build{} = build) do + Lenra.Telemetry.start(:app_deployment, build.application_id) + with loaded_build <- Repo.preload(build, :application), loaded_app <- Repo.preload(loaded_build.application, main_env: [:environment]), %Deployment{} = deployment <- @@ -405,24 +407,25 @@ defmodule Lenra.Apps do |> Repo.transaction() ApplicationServices.stop_app("#{OpenfaasServices.get_function_name(service_name, build_number)}") + Lenra.Telemetry.stop(:app_deployment, deployment.application_id) transaction - # Function not found in openfaas, 2 retry (10s), - # To let openfaas deploy in case of overload, after 2 retry -> failure + # Function not found in openfaas, 30 retry (15s), + # To let openfaas deploy in case of overload, after 30 retry -> failure :error404 -> - if retry == 3 do + if retry == 30 do Logger.critical("Function #{service_name} not deploy on openfaas, this should not appens") update_deployement(deployment, status: :failure) else - Process.sleep(5000) + Process.sleep(500) update_deployement_after_deploy(deployment, env, service_name, build_number, retry + 1) end :error500 _any -> - Process.sleep(5000) + Process.sleep(500) update_deployement_after_deploy(deployment, env, service_name, build_number, retry + 1) end end diff --git a/apps/lenra/lib/monitor.ex b/apps/lenra/lib/monitor.ex new file mode 100644 index 00000000..c9e15d27 --- /dev/null +++ b/apps/lenra/lib/monitor.ex @@ -0,0 +1,45 @@ +defmodule Lenra.Monitor do + @moduledoc """ + This module is monitoring requests at different places + Lenra's monitor executes the following events: + * `[:lenra, :app_deployment, :start]` - Executed when the app's deployment is triggered. + #### Measurements + * start_time. + #### Metadata + * `:application_id` - The id of the application which is deploying. + * `[:lenra, :app_deployment, :stop]` - Executed when the `available_replicas` parameter is not 0 or null on OpenFaaS. + #### Measurements + * end_time. + * `:duration` - The time took by the openfaas function in `:native` unit of time. + """ + + alias Lenra.Repo + + def setup do + events = [ + [:lenra, :app_deployment, :start], + [:lenra, :app_deployment, :stop], + ] + + :telemetry.attach_many( + "lenra.monitor", + events, + &Lenra.Monitor.handle_event/4, + nil + ) + end + + def handle_event([:lenra, :app_deployment, :start], measurements, metadata, _config) do + application_id = Map.get(metadata, :application_id) + + Repo.insert(ApplicationDeploymentMeasurement.new(application_id, measurements)) + end + + def handle_event([:lenra, :app_deployment, :stop], measurements, metadata, _config) do + application_id = Map.get(metadata, :application_id) + + Repo.get_by!(ApplicationDeploymentMeasurement, uuid: application_id) + |> ApplicationDeploymentMeasurement.update(measurements) + |> Repo.update() + end +end From 072436a6c72227c4a708dacea97794be97623f18 Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Fri, 12 Jul 2024 16:19:04 +0200 Subject: [PATCH 2/9] Monitor and ecto schema --- .../application_deployment_measurement.ex | 37 ++++++++++++++ .../monitor/application_deployment_monitor.ex | 48 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 apps/lenra/lib/monitor/application_deployment_measurement.ex create mode 100644 apps/lenra/lib/monitor/application_deployment_monitor.ex diff --git a/apps/lenra/lib/monitor/application_deployment_measurement.ex b/apps/lenra/lib/monitor/application_deployment_measurement.ex new file mode 100644 index 00000000..6c28ce17 --- /dev/null +++ b/apps/lenra/lib/monitor/application_deployment_measurement.ex @@ -0,0 +1,37 @@ +defmodule Lenra.Monitor.ApplicationDeploymentMeasurement do + @moduledoc """ + Lenra.Monitor.ApplicationDeploymentMeasurement is a ecto schema to store measurements of applications deployment. + """ + use Ecto.Schema + import Ecto.Changeset + + alias Lenra.Apps.App + + schema "session_measurement" do + belongs_to(:application, App) + + field(:start_time, :utc_datetime) + field(:end_time, :utc_datetime) + + field(:duration, :integer) + + timestamps() + end + + def changeset(application_deployment_measurement, params \\ %{}) do + application_deployment_measurement + |> cast(params, [:start_time, :end_time, :duration]) + |> validate_required([:start_time, :application_id]) + |> foreign_key_constraint(:application_id) + end + + def new(application_id, params \\ %{}) do + %__MODULE__{application_id: application_id} + |> __MODULE__.changeset(params) + end + + def update(application_deployment_measurement, params) do + application_deployment_measurement + |> changeset(params) + end +end diff --git a/apps/lenra/lib/monitor/application_deployment_monitor.ex b/apps/lenra/lib/monitor/application_deployment_monitor.ex new file mode 100644 index 00000000..872cee46 --- /dev/null +++ b/apps/lenra/lib/monitor/application_deployment_monitor.ex @@ -0,0 +1,48 @@ +defmodule Lenra.Monitor.ApplicationDeploymentMonitor do + @moduledoc """ + The application deployment monitor which monitors the time spent deploying an app. + """ + + use GenServer + use SwarmNamed + + alias Lenra.Telemetry + + require Logger + + def monitor(pid, metadata) do + GenServer.call(__MODULE__, {:monitor, pid, metadata}) + rescue + e -> + Logger.error("#{__MODULE__} fail in monitor with metadata #{inspect(metadata)} and error: #{inspect(e)}") + end + + def start_link(_opts) do + Logger.debug("Start #{__MODULE__}") + GenServer.start_link(__MODULE__, [], name: __MODULE__) + end + + def init(_) do + {:ok, %{}} + end + + def handle_call({:monitor, pid, metadata}, _from, state) do + Logger.debug("#{__MODULE__} monitor #{inspect(pid)} with metadata #{inspect(metadata)}") + + Process.monitor(pid) + + start_time = Map.get(metadata, :start_time) + + {:reply, :ok, Map.put(state, pid, {start_time, metadata})} + end + + def handle_info({:DOWN, _ref, :process, pid, _reason}, state) do + {{start_time, metadata}, new_state} = Map.pop(state, pid) + + Logger.debug("#{__MODULE__} handle down #{inspect(pid)} with metadata #{inspect(metadata)}") + + Telemetry.stop(:app_deployment, start_time, metadata) + + {:noreply, new_state} + end +end From 7bde21e155bca546452e4f82531b630be0e1cc8a Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Fri, 12 Jul 2024 16:42:05 +0200 Subject: [PATCH 3/9] More work, don't know if monitor is put in the right place --- apps/lenra/lib/lenra/application.ex | 4 ++- apps/lenra/lib/monitor.ex | 3 ++- .../monitor/application_deployment_monitor.ex | 25 +++++++++++-------- .../lenra_web/controllers/build_controller.ex | 1 + 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/apps/lenra/lib/lenra/application.ex b/apps/lenra/lib/lenra/application.ex index 6f870cd9..842f421c 100644 --- a/apps/lenra/lib/lenra/application.ex +++ b/apps/lenra/lib/lenra/application.ex @@ -12,6 +12,7 @@ defmodule Lenra.Application do def start(_type, _args) do Lenra.MigrationHelper.migrate() + Lenra.Monitor.setup() children = [ # Start the ecto repository @@ -62,7 +63,8 @@ defmodule Lenra.Application do ), {Cluster.Supervisor, [Application.get_env(:libcluster, :topologies), [name: Lenra.ClusterSupervisor]]}, Kubernetes.StatusDynSup, - {Kubernetes.StatusTask, []} + {Kubernetes.StatusTask, []}, + Lenra.Monitor.ApplicationDeploymentMonitor ] # See https://hexdocs.pm/elixir/Supervisor.html diff --git a/apps/lenra/lib/monitor.ex b/apps/lenra/lib/monitor.ex index c9e15d27..c055a301 100644 --- a/apps/lenra/lib/monitor.ex +++ b/apps/lenra/lib/monitor.ex @@ -13,6 +13,7 @@ defmodule Lenra.Monitor do * `:duration` - The time took by the openfaas function in `:native` unit of time. """ + alias Lenra.Monitor.ApplicationDeploymentMeasurement alias Lenra.Repo def setup do @@ -38,7 +39,7 @@ defmodule Lenra.Monitor do def handle_event([:lenra, :app_deployment, :stop], measurements, metadata, _config) do application_id = Map.get(metadata, :application_id) - Repo.get_by!(ApplicationDeploymentMeasurement, uuid: application_id) + Repo.get_by!(ApplicationDeploymentMeasurement, application_id: application_id) |> ApplicationDeploymentMeasurement.update(measurements) |> Repo.update() end diff --git a/apps/lenra/lib/monitor/application_deployment_monitor.ex b/apps/lenra/lib/monitor/application_deployment_monitor.ex index 872cee46..4968c98d 100644 --- a/apps/lenra/lib/monitor/application_deployment_monitor.ex +++ b/apps/lenra/lib/monitor/application_deployment_monitor.ex @@ -10,13 +10,20 @@ defmodule Lenra.Monitor.ApplicationDeploymentMonitor do require Logger - def monitor(pid, metadata) do - GenServer.call(__MODULE__, {:monitor, pid, metadata}) + def monitor(application_id, metadata) do + GenServer.call(__MODULE__, {:monitor, application_id, metadata}) rescue e -> Logger.error("#{__MODULE__} fail in monitor with metadata #{inspect(metadata)} and error: #{inspect(e)}") end + def stop(application_id, metadata) do + GenServer.call(__MODULE__, {:stop, application_id, metadata}) + rescue + e -> + Logger.error("#{__MODULE__} fail in stop with metadata #{inspect(metadata)} and error: #{inspect(e)}") + end + def start_link(_opts) do Logger.debug("Start #{__MODULE__}") GenServer.start_link(__MODULE__, [], name: __MODULE__) @@ -26,20 +33,18 @@ defmodule Lenra.Monitor.ApplicationDeploymentMonitor do {:ok, %{}} end - def handle_call({:monitor, pid, metadata}, _from, state) do - Logger.debug("#{__MODULE__} monitor #{inspect(pid)} with metadata #{inspect(metadata)}") - - Process.monitor(pid) + def handle_call({:monitor, application_id, metadata}, _from, state) do + Logger.debug("#{__MODULE__} monitor #{inspect(application_id)} with metadata #{inspect(metadata)}") start_time = Map.get(metadata, :start_time) - {:reply, :ok, Map.put(state, pid, {start_time, metadata})} + {:reply, :ok, Map.put(state, application_id, {start_time, metadata})} end - def handle_info({:DOWN, _ref, :process, pid, _reason}, state) do - {{start_time, metadata}, new_state} = Map.pop(state, pid) + def handle_info({:stop, application_id, _metadata}, state) do + {{start_time, metadata}, new_state} = Map.pop(state, application_id) - Logger.debug("#{__MODULE__} handle down #{inspect(pid)} with metadata #{inspect(metadata)}") + Logger.debug("#{__MODULE__} handle down #{inspect(application_id)} with metadata #{inspect(metadata)}") Telemetry.stop(:app_deployment, start_time, metadata) diff --git a/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex b/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex index cae51f4b..f91b50fb 100644 --- a/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex +++ b/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex @@ -16,6 +16,7 @@ defmodule LenraWeb.BuildsController do def create(conn, %{"app_id" => app_id_str} = params) do with {app_id, _} <- Integer.parse(app_id_str), + _res <- Lenra.Monitor.ApplicationDeploymentMonitor.monitor(app_id, %{}), user <- LenraWeb.Auth.current_resource(conn), {:ok, app} <- Apps.fetch_app(app_id), :ok <- allow(conn, app), From d511c457d942ff2ddf0272d2e6c4f8cbb1357116 Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Sat, 13 Jul 2024 16:11:44 +0200 Subject: [PATCH 4/9] Some fixes and add migration --- apps/lenra/lib/lenra/apps.ex | 4 ++-- apps/lenra/lib/monitor.ex | 8 +++++--- .../application_deployment_measurement.ex | 11 ++++++----- ...40043_application_deployment_measurement.exs | 17 +++++++++++++++++ 4 files changed, 30 insertions(+), 10 deletions(-) create mode 100644 apps/lenra/priv/repo/migrations/20240713140043_application_deployment_measurement.exs diff --git a/apps/lenra/lib/lenra/apps.ex b/apps/lenra/lib/lenra/apps.ex index bfbcee49..e64657c3 100644 --- a/apps/lenra/lib/lenra/apps.ex +++ b/apps/lenra/lib/lenra/apps.ex @@ -334,7 +334,7 @@ defmodule Lenra.Apps do end def deploy_in_main_env(%Build{} = build) do - Lenra.Telemetry.start(:app_deployment, build.application_id) + Lenra.Monitor.ApplicationDeploymentMonitor.monitor(build.application_id, %{}) with loaded_build <- Repo.preload(build, :application), loaded_app <- Repo.preload(loaded_build.application, main_env: [:environment]), @@ -407,7 +407,7 @@ defmodule Lenra.Apps do |> Repo.transaction() ApplicationServices.stop_app("#{OpenfaasServices.get_function_name(service_name, build_number)}") - Lenra.Telemetry.stop(:app_deployment, deployment.application_id) + Lenra.Monitor.ApplicationDeploymentMonitor.stop(deployment.application_id, %{}) transaction # Function not found in openfaas, 30 retry (15s), diff --git a/apps/lenra/lib/monitor.ex b/apps/lenra/lib/monitor.ex index c055a301..3705dca2 100644 --- a/apps/lenra/lib/monitor.ex +++ b/apps/lenra/lib/monitor.ex @@ -19,7 +19,7 @@ defmodule Lenra.Monitor do def setup do events = [ [:lenra, :app_deployment, :start], - [:lenra, :app_deployment, :stop], + [:lenra, :app_deployment, :stop] ] :telemetry.attach_many( @@ -32,14 +32,16 @@ defmodule Lenra.Monitor do def handle_event([:lenra, :app_deployment, :start], measurements, metadata, _config) do application_id = Map.get(metadata, :application_id) + build_id = Map.get(metadata, :build_id) - Repo.insert(ApplicationDeploymentMeasurement.new(application_id, measurements)) + Repo.insert(ApplicationDeploymentMeasurement.new(application_id, build_id, measurements)) end def handle_event([:lenra, :app_deployment, :stop], measurements, metadata, _config) do application_id = Map.get(metadata, :application_id) + build_id = Map.get(metadata, :build_id) - Repo.get_by!(ApplicationDeploymentMeasurement, application_id: application_id) + Repo.get_by!(ApplicationDeploymentMeasurement, %{application_id: application_id, build_id: build_id}) |> ApplicationDeploymentMeasurement.update(measurements) |> Repo.update() end diff --git a/apps/lenra/lib/monitor/application_deployment_measurement.ex b/apps/lenra/lib/monitor/application_deployment_measurement.ex index 6c28ce17..2a3f7f67 100644 --- a/apps/lenra/lib/monitor/application_deployment_measurement.ex +++ b/apps/lenra/lib/monitor/application_deployment_measurement.ex @@ -5,10 +5,11 @@ defmodule Lenra.Monitor.ApplicationDeploymentMeasurement do use Ecto.Schema import Ecto.Changeset - alias Lenra.Apps.App + alias Lenra.Apps.{App, Build} - schema "session_measurement" do + schema "application_deployment_measurement" do belongs_to(:application, App) + belongs_to(:build, Build) field(:start_time, :utc_datetime) field(:end_time, :utc_datetime) @@ -21,12 +22,12 @@ defmodule Lenra.Monitor.ApplicationDeploymentMeasurement do def changeset(application_deployment_measurement, params \\ %{}) do application_deployment_measurement |> cast(params, [:start_time, :end_time, :duration]) - |> validate_required([:start_time, :application_id]) + |> validate_required([:start_time, :application_id, :build_id]) |> foreign_key_constraint(:application_id) end - def new(application_id, params \\ %{}) do - %__MODULE__{application_id: application_id} + def new(application_id, build_id, params \\ %{}) do + %__MODULE__{application_id: application_id, build_id: build_id} |> __MODULE__.changeset(params) end diff --git a/apps/lenra/priv/repo/migrations/20240713140043_application_deployment_measurement.exs b/apps/lenra/priv/repo/migrations/20240713140043_application_deployment_measurement.exs new file mode 100644 index 00000000..7138f7eb --- /dev/null +++ b/apps/lenra/priv/repo/migrations/20240713140043_application_deployment_measurement.exs @@ -0,0 +1,17 @@ +defmodule Lenra.Repo.Migrations.ApplicationDeploymentMeasurement do + use Ecto.Migration + + def change do + create table(:application_deployment_measurement) do + add(:user_id, references(:users), null: false) + add(:build_id, references(:builds), null: false) + + add(:start_time, :timestamp, null: false) + add(:end_time, :timestamp) + + add(:duration, :integer) + + timestamps() + end + end +end From d91433dfc7d82099a4fcffa4db5868da3cc41181 Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Sat, 13 Jul 2024 16:13:43 +0200 Subject: [PATCH 5/9] better documentation --- apps/lenra/lib/monitor.ex | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/apps/lenra/lib/monitor.ex b/apps/lenra/lib/monitor.ex index 3705dca2..fa231efb 100644 --- a/apps/lenra/lib/monitor.ex +++ b/apps/lenra/lib/monitor.ex @@ -6,7 +6,8 @@ defmodule Lenra.Monitor do #### Measurements * start_time. #### Metadata - * `:application_id` - The id of the application which is deploying. + * `:application_id` - The id of the deploying application. + * `:build_id` - The id of the deploying build. * `[:lenra, :app_deployment, :stop]` - Executed when the `available_replicas` parameter is not 0 or null on OpenFaaS. #### Measurements * end_time. From fd03c2089c9a4140cccb8a1974392651d519324b Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Sat, 13 Jul 2024 17:09:59 +0200 Subject: [PATCH 6/9] More work --- apps/lenra/lib/lenra/apps.ex | 2 +- .../monitor/application_deployment_monitor.ex | 32 +++++++++++-------- .../lenra_web/controllers/build_controller.ex | 4 +-- 3 files changed, 21 insertions(+), 17 deletions(-) diff --git a/apps/lenra/lib/lenra/apps.ex b/apps/lenra/lib/lenra/apps.ex index e64657c3..08c7e7e5 100644 --- a/apps/lenra/lib/lenra/apps.ex +++ b/apps/lenra/lib/lenra/apps.ex @@ -334,7 +334,7 @@ defmodule Lenra.Apps do end def deploy_in_main_env(%Build{} = build) do - Lenra.Monitor.ApplicationDeploymentMonitor.monitor(build.application_id, %{}) + Lenra.Monitor.ApplicationDeploymentMonitor.monitor(build.application_id, build.id) with loaded_build <- Repo.preload(build, :application), loaded_app <- Repo.preload(loaded_build.application, main_env: [:environment]), diff --git a/apps/lenra/lib/monitor/application_deployment_monitor.ex b/apps/lenra/lib/monitor/application_deployment_monitor.ex index 4968c98d..50529528 100644 --- a/apps/lenra/lib/monitor/application_deployment_monitor.ex +++ b/apps/lenra/lib/monitor/application_deployment_monitor.ex @@ -10,18 +10,22 @@ defmodule Lenra.Monitor.ApplicationDeploymentMonitor do require Logger - def monitor(application_id, metadata) do - GenServer.call(__MODULE__, {:monitor, application_id, metadata}) + def monitor(application_id, build_id) do + GenServer.call(__MODULE__, {:monitor, application_id, build_id}) rescue e -> - Logger.error("#{__MODULE__} fail in monitor with metadata #{inspect(metadata)} and error: #{inspect(e)}") + Logger.error( + "#{__MODULE__} fail in monitor with application_id #{application_id}, build_id #{build_id} and error: #{inspect(e)}" + ) end - def stop(application_id, metadata) do - GenServer.call(__MODULE__, {:stop, application_id, metadata}) + def stop(build_id) do + GenServer.call(__MODULE__, {:stop, build_id}) rescue e -> - Logger.error("#{__MODULE__} fail in stop with metadata #{inspect(metadata)} and error: #{inspect(e)}") + Logger.error( + "#{__MODULE__} fail in stop with build_id #{build_id} and error: #{inspect(e)}" + ) end def start_link(_opts) do @@ -33,20 +37,20 @@ defmodule Lenra.Monitor.ApplicationDeploymentMonitor do {:ok, %{}} end - def handle_call({:monitor, application_id, metadata}, _from, state) do - Logger.debug("#{__MODULE__} monitor #{inspect(application_id)} with metadata #{inspect(metadata)}") + def handle_call({:monitor, application_id, build_id}, _from, state) do + Logger.debug("#{__MODULE__} monitor #{inspect(application_id)} with build_id #{build_id}") - start_time = Map.get(metadata, :start_time) + start_time = Telemetry.start(:app_deployment, %{build_id: build_id}) - {:reply, :ok, Map.put(state, application_id, {start_time, metadata})} + {:reply, :ok, Map.put(state, build_id, {application_id, start_time})} end - def handle_info({:stop, application_id, _metadata}, state) do - {{start_time, metadata}, new_state} = Map.pop(state, application_id) + def handle_info({:stop, build_id}, state) do + {{application_id, start_time}, new_state} = Map.pop(state, build_id) - Logger.debug("#{__MODULE__} handle down #{inspect(application_id)} with metadata #{inspect(metadata)}") + Logger.debug("#{__MODULE__} handle down #{inspect(application_id)} with build_id #{build_id}") - Telemetry.stop(:app_deployment, start_time, metadata) + Telemetry.stop(:app_deployment, start_time, %{build_id: build_id}) {:noreply, new_state} end diff --git a/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex b/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex index f91b50fb..cecd88c8 100644 --- a/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex +++ b/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex @@ -16,12 +16,12 @@ defmodule LenraWeb.BuildsController do def create(conn, %{"app_id" => app_id_str} = params) do with {app_id, _} <- Integer.parse(app_id_str), - _res <- Lenra.Monitor.ApplicationDeploymentMonitor.monitor(app_id, %{}), user <- LenraWeb.Auth.current_resource(conn), {:ok, app} <- Apps.fetch_app(app_id), :ok <- allow(conn, app), {:ok, %{inserted_build: build}} <- - Apps.create_build_and_deploy(user.id, app.id, params) do + Apps.create_build_and_deploy(user.id, app.id, params), + _res <- Lenra.Monitor.ApplicationDeploymentMonitor.monitor(app_id, build.id) do conn |> reply(build) end From c6f624a285bfb30c9a4665a7d60f6b8f3c5e2984 Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Sat, 13 Jul 2024 17:47:31 +0200 Subject: [PATCH 7/9] Move metric start and some fixes --- apps/lenra/lib/lenra/apps.ex | 6 +++--- .../lenra_web/lib/lenra_web/controllers/build_controller.ex | 3 +-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/apps/lenra/lib/lenra/apps.ex b/apps/lenra/lib/lenra/apps.ex index 08c7e7e5..308e2f8e 100644 --- a/apps/lenra/lib/lenra/apps.ex +++ b/apps/lenra/lib/lenra/apps.ex @@ -223,6 +223,8 @@ defmodule Lenra.Apps do creator_id |> create_build(app.id, params) |> Repo.transaction() do + Lenra.Monitor.ApplicationDeploymentMonitor.monitor(app_id, build.id) + case create_deployment( preloaded_app.main_env.environment_id, build.id, @@ -334,8 +336,6 @@ defmodule Lenra.Apps do end def deploy_in_main_env(%Build{} = build) do - Lenra.Monitor.ApplicationDeploymentMonitor.monitor(build.application_id, build.id) - with loaded_build <- Repo.preload(build, :application), loaded_app <- Repo.preload(loaded_build.application, main_env: [:environment]), %Deployment{} = deployment <- @@ -407,7 +407,7 @@ defmodule Lenra.Apps do |> Repo.transaction() ApplicationServices.stop_app("#{OpenfaasServices.get_function_name(service_name, build_number)}") - Lenra.Monitor.ApplicationDeploymentMonitor.stop(deployment.application_id, %{}) + Lenra.Monitor.ApplicationDeploymentMonitor.stop(deployment.build_id) transaction # Function not found in openfaas, 30 retry (15s), diff --git a/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex b/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex index cecd88c8..cae51f4b 100644 --- a/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex +++ b/apps/lenra_web/lib/lenra_web/controllers/build_controller.ex @@ -20,8 +20,7 @@ defmodule LenraWeb.BuildsController do {:ok, app} <- Apps.fetch_app(app_id), :ok <- allow(conn, app), {:ok, %{inserted_build: build}} <- - Apps.create_build_and_deploy(user.id, app.id, params), - _res <- Lenra.Monitor.ApplicationDeploymentMonitor.monitor(app_id, build.id) do + Apps.create_build_and_deploy(user.id, app.id, params) do conn |> reply(build) end From c6fd24335f7cb55bb0d80e79cb8baa8a0f45fcf2 Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Sat, 13 Jul 2024 17:59:53 +0200 Subject: [PATCH 8/9] format --- apps/lenra/lib/monitor/application_deployment_monitor.ex | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/apps/lenra/lib/monitor/application_deployment_monitor.ex b/apps/lenra/lib/monitor/application_deployment_monitor.ex index 50529528..49dd3d07 100644 --- a/apps/lenra/lib/monitor/application_deployment_monitor.ex +++ b/apps/lenra/lib/monitor/application_deployment_monitor.ex @@ -23,9 +23,7 @@ defmodule Lenra.Monitor.ApplicationDeploymentMonitor do GenServer.call(__MODULE__, {:stop, build_id}) rescue e -> - Logger.error( - "#{__MODULE__} fail in stop with build_id #{build_id} and error: #{inspect(e)}" - ) + Logger.error("#{__MODULE__} fail in stop with build_id #{build_id} and error: #{inspect(e)}") end def start_link(_opts) do From d87206b4bdeb4aadcd6b71b78714bc1248a4ebea Mon Sep 17 00:00:00 2001 From: "jonas.martinez" Date: Tue, 16 Jul 2024 10:46:28 +0200 Subject: [PATCH 9/9] fix credo --- apps/lenra/lib/monitor.ex | 3 ++- apps/lenra/lib/monitor/application_deployment_monitor.ex | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/apps/lenra/lib/monitor.ex b/apps/lenra/lib/monitor.ex index fa231efb..9f6286d5 100644 --- a/apps/lenra/lib/monitor.ex +++ b/apps/lenra/lib/monitor.ex @@ -42,7 +42,8 @@ defmodule Lenra.Monitor do application_id = Map.get(metadata, :application_id) build_id = Map.get(metadata, :build_id) - Repo.get_by!(ApplicationDeploymentMeasurement, %{application_id: application_id, build_id: build_id}) + ApplicationDeploymentMeasurement + |> Repo.get_by!(%{application_id: application_id, build_id: build_id}) |> ApplicationDeploymentMeasurement.update(measurements) |> Repo.update() end diff --git a/apps/lenra/lib/monitor/application_deployment_monitor.ex b/apps/lenra/lib/monitor/application_deployment_monitor.ex index 49dd3d07..974fba8c 100644 --- a/apps/lenra/lib/monitor/application_deployment_monitor.ex +++ b/apps/lenra/lib/monitor/application_deployment_monitor.ex @@ -31,7 +31,7 @@ defmodule Lenra.Monitor.ApplicationDeploymentMonitor do GenServer.start_link(__MODULE__, [], name: __MODULE__) end - def init(_) do + def init(_args) do {:ok, %{}} end