Move helpers into their own module, implement factory_reset option.

This commit is contained in:
Connor Rigby 2017-11-29 19:11:51 -08:00 committed by Connor Rigby
parent 7b2c814629
commit 5dd6ed956a
5 changed files with 87 additions and 40 deletions

View file

@ -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, []),

View 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

View file

@ -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)

View file

@ -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

View file

@ -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