Move helpers into their own module, implement factory_reset option.
This commit is contained in:
parent
7b2c814629
commit
5dd6ed956a
|
@ -118,7 +118,6 @@ defmodule Farmbot.Bootstrap.Supervisor do
|
|||
Logger.success(2, "Successful authorization: #{@auth_task} - #{email} - #{server}")
|
||||
ConfigStorage.update_config_value(:bool, "settings", "first_boot", false)
|
||||
ConfigStorage.update_config_value(:string, "authorization", "token", token)
|
||||
ConfigStorage.update_config_value(:string, "authorization", "last_shutdown_reason", nil)
|
||||
|
||||
children = [
|
||||
worker(Farmbot.Bootstrap.AuthTask, []),
|
||||
|
|
52
lib/farmbot/system/config_storage/migration_helpers.ex
Normal file
52
lib/farmbot/system/config_storage/migration_helpers.ex
Normal file
|
@ -0,0 +1,52 @@
|
|||
defmodule Farmbot.System.ConfigStorage.MigrationHelpers do
|
||||
@moduledoc false
|
||||
|
||||
# This is pretty bad practice, but i don't plan on really changing it at all.
|
||||
|
||||
alias Farmbot.System.ConfigStorage
|
||||
alias ConfigStorage.{Config, StringValue, BoolValue, FloatValue}
|
||||
|
||||
@auth_group_id 1
|
||||
@hw_param_group_id 2
|
||||
@settings_group_id 3
|
||||
|
||||
def create_auth_config(key, type, value) when type in [:string, :float, :bool] do
|
||||
create_value(type_to_mod(type), value)
|
||||
|> create_config(@auth_group_id, key)
|
||||
end
|
||||
|
||||
def create_settings_config(key, type, value) when type in [:string, :float, :bool] do
|
||||
create_value(type_to_mod(type), value)
|
||||
|> create_config(@settings_group_id, key)
|
||||
end
|
||||
|
||||
def create_hw_param(key) when is_binary(key) do
|
||||
create_value(FloatValue, nil) |> create_config(@hw_param_group_id, key)
|
||||
end
|
||||
|
||||
defp type_to_mod(:string), do: StringValue
|
||||
defp type_to_mod(:float), do: FloatValue
|
||||
defp type_to_mod(:bool), do: BoolValue
|
||||
|
||||
def create_config(value, group_id, key) do
|
||||
%Config{group_id: group_id, key: key}
|
||||
|> Map.put(
|
||||
:"#{Module.split(value.__struct__) |> List.last() |> Macro.underscore()}_id",
|
||||
value.id
|
||||
)
|
||||
|> Config.changeset()
|
||||
|> ConfigStorage.insert!()
|
||||
end
|
||||
|
||||
def create_value(type, val \\ nil) do
|
||||
unless Code.ensure_loaded?(type) do
|
||||
raise "Unknown type: #{type}"
|
||||
end
|
||||
|
||||
type
|
||||
|> struct()
|
||||
|> Map.put(:value, val)
|
||||
|> type.changeset()
|
||||
|> ConfigStorage.insert!()
|
||||
end
|
||||
end
|
|
@ -34,6 +34,16 @@ defmodule Farmbot.System do
|
|||
@doc "Remove all configuration data, and reboot."
|
||||
@spec factory_reset(unparsed_reason) :: no_return
|
||||
def factory_reset(reason) do
|
||||
if Process.whereis Farmbot.System.ConfigStorage do
|
||||
unless Farmbot.System.ConfigStorage.get_config_value(:bool, "settings", "disable_factory_reset") do
|
||||
do_reset(reason)
|
||||
end
|
||||
else
|
||||
do_reset(reason)
|
||||
end
|
||||
end
|
||||
|
||||
defp do_reset(reason) do
|
||||
formatted = format_reason(reason)
|
||||
Ecto.drop()
|
||||
write_file(formatted)
|
||||
|
|
|
@ -2,6 +2,7 @@ defmodule Farmbot.System.ConfigStorage.Migrations.SeedGroups do
|
|||
use Ecto.Migration
|
||||
alias Farmbot.System.ConfigStorage
|
||||
alias ConfigStorage.{Config, Group, StringValue, BoolValue, FloatValue}
|
||||
import Farmbot.System.ConfigStorage.MigrationHelpers
|
||||
import Ecto.Query, only: [from: 2]
|
||||
|
||||
@group_names ["authorization", "hardware_params", "settings"]
|
||||
|
@ -33,7 +34,21 @@ defmodule Farmbot.System.ConfigStorage.Migrations.SeedGroups do
|
|||
create_value(StringValue, nil) |> create_config(group_id, "email")
|
||||
create_value(StringValue, nil) |> create_config(group_id, "password")
|
||||
create_value(StringValue, nil) |> create_config(group_id, "token")
|
||||
create_value(StringValue, nil) |> create_config(group_id, "last_shutdown_reason")
|
||||
end
|
||||
|
||||
defp populate_config_values("settings", group_id) do
|
||||
create_value(BoolValue, false) |> create_config(group_id, "os_auto_update")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "ignore_external_logs")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "first_boot")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "first_sync")
|
||||
create_value(StringValue, "A") |> create_config(group_id, "current_repo")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "first_party_farmware")
|
||||
create_value(BoolValue, false) |> create_config(group_id, "auto_sync")
|
||||
create_value(StringValue, nil) |> create_config(group_id, "firmware_hardware")
|
||||
create_value(StringValue, nil) |> create_config(group_id, "timezone")
|
||||
create_value(StringValue, "{}") |> create_config(group_id, "user_env")
|
||||
fpf_url = Application.get_env(:farmbot, :farmware)[:first_part_farmware_manifest_url]
|
||||
create_value(StringValue, fpf_url) |> create_config(group_id, "first_party_farmware_url")
|
||||
end
|
||||
|
||||
defp populate_config_values("hardware_params", group_id) do
|
||||
|
@ -127,42 +142,4 @@ defmodule Farmbot.System.ConfigStorage.Migrations.SeedGroups do
|
|||
create_value(FloatValue, nil) |> create_config(group_id, "pin_guard_5_time_out")
|
||||
create_value(FloatValue, nil) |> create_config(group_id, "pin_guard_5_active_state")
|
||||
end
|
||||
|
||||
defp populate_config_values("settings", group_id) do
|
||||
create_value(BoolValue, false) |> create_config(group_id, "os_auto_update")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "ignore_external_logs")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "first_boot")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "first_sync")
|
||||
create_value(StringValue, "A") |> create_config(group_id, "current_repo")
|
||||
create_value(BoolValue, true) |> create_config(group_id, "first_party_farmware")
|
||||
create_value(BoolValue, false) |> create_config(group_id, "auto_sync")
|
||||
create_value(StringValue, nil) |> create_config(group_id, "firmware_hardware")
|
||||
create_value(StringValue, nil) |> create_config(group_id, "timezone")
|
||||
create_value(FloatValue, nil) |> create_config(group_id, "network_not_found_timer")
|
||||
create_value(StringValue, "{}") |> create_config(group_id, "user_env")
|
||||
fpf_url = Application.get_env(:farmbot, :farmware)[:first_part_farmware_manifest_url]
|
||||
create_value(StringValue, fpf_url) |> create_config(group_id, "first_party_farmware_url")
|
||||
end
|
||||
|
||||
defp create_config(value, group_id, key) do
|
||||
%Config{group_id: group_id, key: key}
|
||||
|> Map.put(
|
||||
:"#{Module.split(value.__struct__) |> List.last() |> Macro.underscore()}_id",
|
||||
value.id
|
||||
)
|
||||
|> Config.changeset()
|
||||
|> ConfigStorage.insert!()
|
||||
end
|
||||
|
||||
defp create_value(type, val \\ nil) do
|
||||
unless Code.ensure_loaded?(type) do
|
||||
raise "Unknown type: #{type}"
|
||||
end
|
||||
|
||||
type
|
||||
|> struct()
|
||||
|> Map.put(:value, val)
|
||||
|> type.changeset()
|
||||
|> ConfigStorage.insert!()
|
||||
end
|
||||
end
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
defmodule Farmbot.System.ConfigStorage.Migrations.AddFactoryResetSettings do
|
||||
use Ecto.Migration
|
||||
import Farmbot.System.ConfigStorage.MigrationHelpers
|
||||
|
||||
def change do
|
||||
create_settings_config("disable_factory_reset", :bool, false)
|
||||
create_settings_config("network_not_found_timer", :float, nil)
|
||||
end
|
||||
end
|
Loading…
Reference in a new issue