Allow ignoring of some factory resets.
This commit is contained in:
parent
7c541c103b
commit
9c6f5aa1fc
|
@ -18,19 +18,13 @@ defmodule Farmbot.CeleryScript.AST.Node.ConfigUpdate do
|
|||
case lookup_os_config(key, value) do
|
||||
{:ok, {:string, "settings", val}} when val in ["farmduino", "arduino"] ->
|
||||
Farmbot.System.ConfigStorage.update_config_value(:string, "settings", key, val)
|
||||
|
||||
if Application.get_env(:farmbot, :behaviour)[:firmware_handler] == Farmbot.Firmware.UartHandler do
|
||||
Logger.warn 1, "Updating #{val} firmware."
|
||||
old_env = Application.get_env(:farmbot, :behaviour)
|
||||
new_env = Keyword.put(old_env, :firmware_handler, Farmbot.Firmware.StubHandler)
|
||||
Application.put_env(:farmbot, :behaviour, new_env)
|
||||
GenServer.stop(Farmbot.Firmware, :shutdown)
|
||||
Farmbot.Firmware.UartHandler.Update.maybe_update_firmware(val)
|
||||
Application.put_env(:farmbot, :behaviour, old_env)
|
||||
GenServer.stop(Farmbot.Firmware, :shutdown)
|
||||
end
|
||||
|
||||
do_reduce_os(rest, env)
|
||||
hack_file = Path.join(Application.get_env(:farmbot, :data_path), "firmware_flash")
|
||||
File.write!(hack_file, val)
|
||||
Farmbot.BotState.set_sync_status(:maintenance)
|
||||
Logger.warn 1, "Rebooting to flash firmware."
|
||||
Farmbot.System.reboot("Flash arduino fw.")
|
||||
# Stop enumeration here.
|
||||
{:ok, env}
|
||||
{:ok, {type, group, value}} ->
|
||||
Farmbot.System.ConfigStorage.update_config_value(type, group, key, value)
|
||||
Logger.success 3, "Updating: #{inspect key}: #{value}"
|
||||
|
|
|
@ -86,6 +86,7 @@ defmodule Farmbot.Firmware.UartHandler do
|
|||
# If in dev environment, it is expected that this be done at compile time.
|
||||
# If in target environment, this should be done by `Farmbot.Firmware.AutoDetector`.
|
||||
tty = Application.get_env(:farmbot, :uart_handler)[:tty] || raise "Please configure uart handler!"
|
||||
maybe_flash_fw(tty)
|
||||
storage_dispatch = Farmbot.System.ConfigStorage.Dispatcher
|
||||
case open_tty(tty) do
|
||||
{:ok, nerves} ->
|
||||
|
@ -97,6 +98,17 @@ defmodule Farmbot.Firmware.UartHandler do
|
|||
end
|
||||
end
|
||||
|
||||
defp maybe_flash_fw(_tty) do
|
||||
hack_file = Path.join(Application.get_env(:farmbot, :data_path), "firmware_flash")
|
||||
case File.read(hack_file) do
|
||||
{:ok, value} when value in ["arduino", "farmduino"] ->
|
||||
Farmbot.System.ConfigStorage.update_config_value(:string, "settings", "firmware_hardware", value)
|
||||
Farmbot.Firmware.UartHandler.Update.maybe_update_firmware(value)
|
||||
File.rm!(hack_file)
|
||||
_ -> :ok
|
||||
end
|
||||
end
|
||||
|
||||
def handle_events(events, _, state) do
|
||||
state = Enum.reduce(events, state, fn(event, state_acc) ->
|
||||
handle_config(event, state_acc)
|
||||
|
|
|
@ -47,9 +47,14 @@ defmodule Farmbot.System do
|
|||
|
||||
defp do_reset(reason) do
|
||||
formatted = format_reason(reason)
|
||||
Ecto.drop()
|
||||
write_file(formatted)
|
||||
@system_tasks.factory_reset(formatted)
|
||||
case formatted do
|
||||
nil -> reboot("Escape factory reset: #{inspect reason}")
|
||||
{:ignore, reason} -> reboot(reason)
|
||||
_ ->
|
||||
Ecto.drop()
|
||||
write_file(formatted)
|
||||
@system_tasks.factory_reset(formatted)
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Reboot."
|
||||
|
@ -84,31 +89,27 @@ defmodule Farmbot.System do
|
|||
|
||||
@doc "Format an error for human consumption."
|
||||
def format_reason(reason) do
|
||||
raise "deleteme"
|
||||
rescue
|
||||
_ ->
|
||||
[_ | [_ | stack]] = System.stacktrace()
|
||||
stack = Enum.map(stack, fn er -> "\t#{inspect(er)}" end) |> Enum.join(",\r\n <p>")
|
||||
formated = do_format_reason(reason)
|
||||
footer = """
|
||||
<hr>
|
||||
<p>
|
||||
<p>
|
||||
<p> <strong> environment: </strong> #{@env}
|
||||
<p> <strong> source_ref: </strong> #{@ref}
|
||||
<p> <strong> target: </strong> #{@target}
|
||||
<p>
|
||||
<p>
|
||||
Stacktrace:
|
||||
<p> [#{stack}]
|
||||
<hr>
|
||||
"""
|
||||
if formated do
|
||||
formated <> footer
|
||||
else
|
||||
nil
|
||||
end
|
||||
|
||||
[_ | [_ | stack]] = System.stacktrace()
|
||||
stack = Enum.map(stack, fn er -> "\t#{inspect(er)}" end) |> Enum.join(",\r\n <p>")
|
||||
formated = do_format_reason(reason)
|
||||
footer = """
|
||||
<hr>
|
||||
<p>
|
||||
<p>
|
||||
<p> <strong> environment: </strong> #{@env}
|
||||
<p> <strong> source_ref: </strong> #{@ref}
|
||||
<p> <strong> target: </strong> #{@target}
|
||||
<p>
|
||||
<p>
|
||||
Stacktrace:
|
||||
<p> [#{stack}]
|
||||
<hr>
|
||||
"""
|
||||
case formated do
|
||||
nil -> nil
|
||||
{:ignore, reason} -> {:ignore, reason}
|
||||
formatted when is_binary(formatted) -> formated <> footer
|
||||
end
|
||||
end
|
||||
|
||||
# This mess of pattern matches cleans up erlang startup errors. It's very
|
||||
|
@ -160,10 +161,10 @@ defmodule Farmbot.System do
|
|||
end
|
||||
|
||||
defp do_format_reason({:badarg, [{:ets, :lookup_element, _, _} | _]}) do
|
||||
"""
|
||||
{:ignore, """
|
||||
Bad Ecto call. This usually is a result of an over the air update and can
|
||||
likely be ignored.
|
||||
"""
|
||||
"""}
|
||||
end
|
||||
|
||||
defp do_format_reason(reason), do: do_format_reason({:error, reason})
|
||||
|
|
Loading…
Reference in a new issue