From 1875a1bcb54e63f71a0c0d9b58de720f57e2fab9 Mon Sep 17 00:00:00 2001 From: connor rigby Date: Tue, 13 Feb 2018 09:25:29 -0800 Subject: [PATCH] Add special setting to ignore settings updates. --- lib/farmbot/bootstrap/settings_sync.ex | 5 +++- lib/farmbot/bot_state/transport/amqp/amqp.ex | 27 ++++++++++++------- .../20180213164114_ignore_fbos_config.exs | 9 +++++++ 3 files changed, 31 insertions(+), 10 deletions(-) create mode 100644 priv/config_storage/migrations/20180213164114_ignore_fbos_config.exs diff --git a/lib/farmbot/bootstrap/settings_sync.ex b/lib/farmbot/bootstrap/settings_sync.ex index 5a86a166..7e8e4180 100644 --- a/lib/farmbot/bootstrap/settings_sync.ex +++ b/lib/farmbot/bootstrap/settings_sync.ex @@ -5,7 +5,8 @@ defmodule Farmbot.Bootstrap.SettingsSync do import Farmbot.System.ConfigStorage, only: [get_config_value: 3, update_config_value: 4, get_config_as_map: 0] def start_link() do - Task.start_link(__MODULE__, :run, []) + run() + :ignore end def run() do @@ -95,6 +96,7 @@ defmodule Farmbot.Bootstrap.SettingsSync do def do_sync_settings(_unimportant_data) do Logger.info 3, "FBOS is the source of truth; Uploading data." + update_config_value(:bool, "settings", "ignore_fbos_config", true) auto_sync = get_config_value(:bool, "settings", "auto_sync") beta_opt_in = get_config_value(:bool, "settings", "beta_opt_in") disable_factory_reset = get_config_value(:bool, "settings", "disable_factory_reset") @@ -124,6 +126,7 @@ defmodule Farmbot.Bootstrap.SettingsSync do } |> Poison.encode!() Farmbot.HTTP.delete!("/api/fbos_config") Farmbot.HTTP.put!("/api/fbos_config", payload) + update_config_value(:bool, "settings", "ignore_fbos_config", false) :ok end diff --git a/lib/farmbot/bot_state/transport/amqp/amqp.ex b/lib/farmbot/bot_state/transport/amqp/amqp.ex index 1e858e06..ff8fdbfc 100644 --- a/lib/farmbot/bot_state/transport/amqp/amqp.ex +++ b/lib/farmbot/bot_state/transport/amqp/amqp.ex @@ -233,16 +233,25 @@ defmodule Farmbot.BotState.Transport.AMQP do {:noreply, [], state} end + def handle_fbos_config(_, _, %{state_cache: nil}) do + # Don't update fbos config, if we don't have a state cache for whatever reason. + {:noreply, [], state} + end + def handle_fbos_config(_id, payload, state) do - case Poison.decode(payload) do - # TODO(Connor) What do I do with deletes? - {:ok, %{"body" => nil}} -> {:noreply, [], state} - {:ok, %{"body" => config}} -> - # Logger.info 1, "Got fbos config from amqp: #{inspect config}" - old = state.state_cache.configuration - updated = Farmbot.Bootstrap.SettingsSync.apply_map(old, config) - push_bot_state(state.chan, state.bot, %{state.state_cache | configuration: updated}) - {:noreply, [], state} + if get_config_value(:bool, "settings", "ignore_fbos_config") do + {:noreply, [], state} + else + case Poison.decode(payload) do + # TODO(Connor) What do I do with deletes? + {:ok, %{"body" => nil}} -> {:noreply, [], state} + {:ok, %{"body" => config}} -> + # Logger.info 1, "Got fbos config from amqp: #{inspect config}" + old = state.state_cache.configuration + updated = Farmbot.Bootstrap.SettingsSync.apply_map(old, config) + push_bot_state(state.chan, state.bot, %{state.state_cache | configuration: updated}) + {:noreply, [], state} + end end end diff --git a/priv/config_storage/migrations/20180213164114_ignore_fbos_config.exs b/priv/config_storage/migrations/20180213164114_ignore_fbos_config.exs new file mode 100644 index 00000000..21ecf09c --- /dev/null +++ b/priv/config_storage/migrations/20180213164114_ignore_fbos_config.exs @@ -0,0 +1,9 @@ +defmodule Farmbot.System.ConfigStorage.Migrations.IgnoreFbosConfig do + use Ecto.Migration + + import Farmbot.System.ConfigStorage.MigrationHelpers + + def change do + create_settings_config("ignore_fbos_config", :bool, true) + end +end