Rename FarmbotCore Namespace
parent
22ceb7a01a
commit
f1dd9009ea
|
@ -1,6 +1,6 @@
|
|||
alias Farmbot.{Asset, Asset.Repo}
|
||||
alias FarmbotCore.{Asset, Asset.Repo}
|
||||
|
||||
alias Farmbot.Asset.{
|
||||
alias FarmbotCore.Asset.{
|
||||
Device,
|
||||
FarmwareEnv,
|
||||
FarmwareInstallation,
|
||||
|
|
|
@ -42,4 +42,4 @@ static ErlNifFunc nif_funcs[] =
|
|||
{"do_build_calendar", 5, do_build_calendar}
|
||||
};
|
||||
|
||||
ERL_NIF_INIT(Elixir.Farmbot.Asset.FarmEvent, nif_funcs, NULL,NULL,NULL,NULL)
|
||||
ERL_NIF_INIT(Elixir.FarmbotCore.Asset.FarmEvent, nif_funcs, NULL,NULL,NULL,NULL)
|
||||
|
|
|
@ -1,35 +1,40 @@
|
|||
use Mix.Config
|
||||
|
||||
config :farmbot_core, Farmbot.AssetWorker.Farmbot.Asset.FarmEvent, checkup_time_ms: 10_000
|
||||
config :farmbot_core, Farmbot.AssetWorker.Farmbot.Asset.PersistentRegimen, checkup_time_ms: 10_000
|
||||
config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmEvent, checkup_time_ms: 10_000
|
||||
|
||||
config :farmbot_core, Farmbot.AssetWorker.Farmbot.Asset.FarmwareInstallation,
|
||||
config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen,
|
||||
checkup_time_ms: 10_000
|
||||
|
||||
config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmwareInstallation,
|
||||
error_retry_time_ms: 30_000,
|
||||
install_dir: "/tmp/farmware"
|
||||
|
||||
config :farmbot_core, Farmbot.FarmwareRuntime, runtime_dir: "/tmp/farmware_runtime"
|
||||
config :farmbot_core, FarmbotCore.FarmwareRuntime, runtime_dir: "/tmp/farmware_runtime"
|
||||
|
||||
config :farmbot_core, Elixir.Farmbot.AssetWorker.Farmbot.Asset.PinBinding,
|
||||
gpio_handler: Farmbot.PinBindingWorker.StubGPIOHandler,
|
||||
config :farmbot_core, Elixir.FarmbotCore.AssetWorker.FarmbotCore.Asset.PinBinding,
|
||||
gpio_handler: FarmbotCore.PinBindingWorker.StubGPIOHandler,
|
||||
error_retry_time_ms: 30_000
|
||||
|
||||
config :farmbot_core, Farmbot.AssetMonitor, checkup_time_ms: 30_000
|
||||
config :farmbot_core, FarmbotCore.AssetMonitor, checkup_time_ms: 30_000
|
||||
|
||||
config :farmbot_core, Farmbot.Leds, gpio_handler: Farmbot.Leds.StubHandler
|
||||
config :farmbot_core, FarmbotCore.Leds, gpio_handler: FarmbotCore.Leds.StubHandler
|
||||
|
||||
config :farmbot_core, Farmbot.JSON, json_parser: Farmbot.JSON.JasonParser
|
||||
config :farmbot_core, FarmbotCore.JSON, json_parser: FarmbotCore.JSON.JasonParser
|
||||
|
||||
config :farmbot_core, Farmbot.BotState.FileSystem,
|
||||
config :farmbot_core, FarmbotCore.BotState.FileSystem,
|
||||
root_dir: "/tmp/farmbot",
|
||||
sleep_time: 200
|
||||
|
||||
config :farmbot_celery_script, Farmbot.CeleryScript.SysCalls,
|
||||
sys_calls: Farmbot.CeleryScript.SysCalls.Stubs
|
||||
config :farmbot_celery_script, FarmbotCeleryScript.SysCalls,
|
||||
sys_calls: FarmbotCore.CeleryScript.SysCalls.Stubs
|
||||
|
||||
config :farmbot_core, Farmbot.EctoMigrator,
|
||||
config :farmbot_core, FarmbotCore.EctoMigrator,
|
||||
expected_fw_versions: ["6.4.2.F", "6.4.2.R", "6.4.2.G"],
|
||||
default_firmware_io_logs: false,
|
||||
default_server: "https://my.farm.bot",
|
||||
default_dns_name: "my.farm.bot",
|
||||
default_ntp_server_1: "0.pool.ntp.org",
|
||||
default_ntp_server_2: "1.pool.ntp.org",
|
||||
default_currently_on_beta:
|
||||
String.contains?(to_string(:os.cmd('git rev-parse --abbrev-ref HEAD')), "beta")
|
||||
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
use Mix.Config
|
||||
config :ecto, json_library: Farmbot.JSON
|
||||
config :ecto, json_library: FarmbotCore.JSON
|
||||
|
||||
config :farmbot_core,
|
||||
ecto_repos: [Farmbot.Config.Repo, Farmbot.Logger.Repo, Farmbot.Asset.Repo]
|
||||
ecto_repos: [FarmbotCore.Config.Repo, FarmbotCore.Logger.Repo, FarmbotCore.Asset.Repo]
|
||||
|
||||
config :farmbot_core, Farmbot.Config.Repo,
|
||||
config :farmbot_core, FarmbotCore.Config.Repo,
|
||||
adapter: Sqlite.Ecto2,
|
||||
loggers: [],
|
||||
database: "config.#{Mix.env()}.db",
|
||||
priv: "priv/config"
|
||||
|
||||
config :farmbot_core, Farmbot.Logger.Repo,
|
||||
config :farmbot_core, FarmbotCore.Logger.Repo,
|
||||
adapter: Sqlite.Ecto2,
|
||||
loggers: [],
|
||||
database: "logger.#{Mix.env()}.db",
|
||||
priv: "priv/logger"
|
||||
|
||||
config :farmbot_core, Farmbot.Asset.Repo,
|
||||
config :farmbot_core, FarmbotCore.Asset.Repo,
|
||||
adapter: Sqlite.Ecto2,
|
||||
loggers: [],
|
||||
database: "asset.#{Mix.env()}.db",
|
||||
|
|
|
@ -2,10 +2,12 @@ use Mix.Config
|
|||
|
||||
# must be lower than other timers
|
||||
# To ensure other timers have time to timeout
|
||||
config :farmbot_core, Farmbot.AssetMonitor, checkup_time_ms: 500
|
||||
config :farmbot_core, FarmbotCore.AssetMonitor, checkup_time_ms: 500
|
||||
|
||||
config :farmbot_core, Farmbot.AssetWorker.Farmbot.Asset.FarmEvent, checkup_time_ms: 1000
|
||||
config :farmbot_core, Farmbot.AssetWorker.Farmbot.Asset.PersistentRegimen, checkup_time_ms: 1000
|
||||
config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmEvent, checkup_time_ms: 1000
|
||||
|
||||
config :farmbot_core, Farmbot.Core.CeleryScript.RunTimeWrapper,
|
||||
celery_script_io_layer: Farmbot.TestSupport.CeleryScript.TestIOLayer
|
||||
config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen,
|
||||
checkup_time_ms: 1000
|
||||
|
||||
config :farmbot_core, FarmbotCore.CeleryScript.RunTimeWrapper,
|
||||
celery_script_io_layer: FarmbotCore.TestSupport.CeleryScript.TestIOLayer
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Core do
|
||||
defmodule FarmbotCore do
|
||||
@moduledoc """
|
||||
Core Farmbot Services.
|
||||
This includes Logging, Configuration, Asset management and Firmware.
|
||||
|
@ -11,15 +11,15 @@ defmodule Farmbot.Core do
|
|||
def init([]) do
|
||||
|
||||
children = [
|
||||
Farmbot.EctoMigrator,
|
||||
FarmbotCore.EctoMigrator,
|
||||
# TODO(Connor) - Put these in their own supervisor
|
||||
Farmbot.BotState,
|
||||
Farmbot.BotState.FileSystem,
|
||||
Farmbot.Logger.Supervisor,
|
||||
Farmbot.Config.Supervisor,
|
||||
Farmbot.Asset.Supervisor,
|
||||
Farmbot.Core.FirmwareSupervisor,
|
||||
Farmbot.CeleryScript.Scheduler,
|
||||
FarmbotCore.BotState,
|
||||
FarmbotCore.BotState.FileSystem,
|
||||
FarmbotCore.Logger.Supervisor,
|
||||
FarmbotCore.Config.Supervisor,
|
||||
FarmbotCore.Asset.Supervisor,
|
||||
FarmbotCore.FirmwareSupervisor,
|
||||
FarmbotCeleryScript.Scheduler,
|
||||
]
|
||||
Supervisor.init(children, [strategy: :one_for_all])
|
||||
end
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
defmodule Farmbot.Asset do
|
||||
alias Farmbot.Asset.{
|
||||
defmodule FarmbotCore.Asset do
|
||||
alias FarmbotCore.Asset.{
|
||||
Repo,
|
||||
Device,
|
||||
DeviceCert,
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
defmodule Farmbot.Asset.Device do
|
||||
defmodule FarmbotCore.Asset.Device do
|
||||
@moduledoc """
|
||||
The current device. Should only ever be _one_ of these. If not there is a huge
|
||||
problem probably higher up the stack.
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/device"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/device"
|
||||
|
||||
schema "devices" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
defmodule Farmbot.Asset.DeviceCert do
|
||||
defmodule FarmbotCore.Asset.DeviceCert do
|
||||
@moduledoc """
|
||||
DeviceCerts describe a connection to NervesHub
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/device_cert"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/device_cert"
|
||||
|
||||
schema "device_certs" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
defmodule Elixir.Farmbot.Asset.DiagnosticDump do
|
||||
defmodule FarmbotCore.Asset.DiagnosticDump do
|
||||
@moduledoc """
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/diagnostic_dumps"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/diagnostic_dumps"
|
||||
|
||||
schema "diagnostic_dumps" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
defmodule Elixir.Farmbot.Asset.FarmEvent do
|
||||
defmodule FarmbotCore.Asset.FarmEvent do
|
||||
@moduledoc """
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/farm_events"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/farm_events"
|
||||
|
||||
schema "farm_events" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
defmodule Elixir.Farmbot.Asset.FarmwareEnv do
|
||||
defmodule FarmbotCore.Asset.FarmwareEnv do
|
||||
@moduledoc """
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/farmware_envs"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/farmware_envs"
|
||||
|
||||
schema "farmware_envs" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
defmodule Farmbot.Asset.FarmwareInstallation do
|
||||
defmodule FarmbotCore.Asset.FarmwareInstallation do
|
||||
@moduledoc """
|
||||
"""
|
||||
|
||||
alias Farmbot.Asset.FarmwareInstallation.Manifest
|
||||
alias FarmbotCore.Asset.FarmwareInstallation.Manifest
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/farmware_installations"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/farmware_installations"
|
||||
|
||||
schema "farmware_installations" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
defmodule Farmbot.Asset.FarmwareInstallation.Manifest do
|
||||
defmodule FarmbotCore.Asset.FarmwareInstallation.Manifest do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
@primary_key false
|
||||
|
||||
alias FarmbotCore.Project
|
||||
|
||||
embedded_schema do
|
||||
field(:package, :string)
|
||||
field(:language, :string)
|
||||
|
@ -56,7 +58,7 @@ defmodule Farmbot.Asset.FarmwareInstallation.Manifest do
|
|||
|
||||
defp validate_required_os_version(changeset) do
|
||||
req = get_field(changeset, :os_version_requirement)
|
||||
cur = Farmbot.Project.version()
|
||||
cur = Project.version()
|
||||
|
||||
match =
|
||||
try do
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
defmodule Elixir.Farmbot.Asset.FbosConfig do
|
||||
defmodule FarmbotCore.Asset.FbosConfig do
|
||||
@moduledoc """
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/fbos_config"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/fbos_config"
|
||||
|
||||
schema "fbos_configs" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
defmodule Elixir.Farmbot.Asset.FirmwareConfig do
|
||||
defmodule FarmbotCore.Asset.FirmwareConfig do
|
||||
@moduledoc """
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/firmware_config"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/firmware_config"
|
||||
|
||||
schema "firmware_configs" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
defmodule Farmbot.Asset.Peripheral do
|
||||
defmodule FarmbotCore.Asset.Peripheral do
|
||||
@moduledoc """
|
||||
Peripherals are descriptors for pins/modes.
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/peripherals"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/peripherals"
|
||||
|
||||
schema "peripherals" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
defmodule Farmbot.Asset.PersistentRegimen do
|
||||
defmodule FarmbotCore.Asset.PersistentRegimen do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
@primary_key {:local_id, :binary_id, autogenerate: true}
|
||||
@timestamps_opts inserted_at: :created_at, type: :utc_datetime
|
||||
|
||||
schema "persistent_regimens" do
|
||||
belongs_to(:regimen, Farmbot.Asset.Regimen, references: :local_id, type: :binary_id)
|
||||
belongs_to(:farm_event, Farmbot.Asset.FarmEvent, references: :local_id, type: :binary_id)
|
||||
belongs_to(:regimen, FarmbotCore.Asset.Regimen, references: :local_id, type: :binary_id)
|
||||
belongs_to(:farm_event, FarmbotCore.Asset.FarmEvent, references: :local_id, type: :binary_id)
|
||||
field(:epoch, :utc_datetime)
|
||||
field(:started_at, :utc_datetime)
|
||||
field(:next, :utc_datetime)
|
||||
|
@ -42,7 +42,7 @@ defmodule Farmbot.Asset.PersistentRegimen do
|
|||
# returns midnight of today
|
||||
@spec build_epoch(DateTime.t()) :: DateTime.t()
|
||||
def build_epoch(%DateTime{} = datetime) do
|
||||
case Farmbot.Asset.device().timezone do
|
||||
case FarmbotCore.Asset.device().timezone do
|
||||
nil ->
|
||||
:error
|
||||
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
defmodule Farmbot.Asset.PinBinding do
|
||||
defmodule FarmbotCore.Asset.PinBinding do
|
||||
@moduledoc """
|
||||
When a pin binding is triggered a sequence fires.
|
||||
"""
|
||||
use Farmbot.Asset.Schema, path: "/api/pin_bindings"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/pin_bindings"
|
||||
|
||||
schema "pin_bindings" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
@ -54,28 +54,28 @@ defmodule Farmbot.Asset.PinBinding do
|
|||
end
|
||||
end
|
||||
|
||||
defimpl String.Chars, for: Farmbot.Asset.PinBinding do
|
||||
def to_string(%Farmbot.Asset.PinBinding{pin_num: 16}) do
|
||||
defimpl String.Chars, for: FarmbotCore.Asset.PinBinding do
|
||||
def to_string(%FarmbotCore.Asset.PinBinding{pin_num: 16}) do
|
||||
"Button 1"
|
||||
end
|
||||
|
||||
def to_string(%Farmbot.Asset.PinBinding{pin_num: 22}) do
|
||||
def to_string(%FarmbotCore.Asset.PinBinding{pin_num: 22}) do
|
||||
"Button 2"
|
||||
end
|
||||
|
||||
def to_string(%Farmbot.Asset.PinBinding{pin_num: 26}) do
|
||||
def to_string(%FarmbotCore.Asset.PinBinding{pin_num: 26}) do
|
||||
"Button 3"
|
||||
end
|
||||
|
||||
def to_string(%Farmbot.Asset.PinBinding{pin_num: 5}) do
|
||||
def to_string(%FarmbotCore.Asset.PinBinding{pin_num: 5}) do
|
||||
"Button 4"
|
||||
end
|
||||
|
||||
def to_string(%Farmbot.Asset.PinBinding{pin_num: 20}) do
|
||||
def to_string(%FarmbotCore.Asset.PinBinding{pin_num: 20}) do
|
||||
"Button 5"
|
||||
end
|
||||
|
||||
def to_string(%Farmbot.Asset.PinBinding{pin_num: num}) do
|
||||
def to_string(%FarmbotCore.Asset.PinBinding{pin_num: num}) do
|
||||
"Pi GPIO #{num}"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
defmodule Farmbot.Asset.Point do
|
||||
defmodule FarmbotCore.Asset.Point do
|
||||
@moduledoc """
|
||||
Points are data around an x,y,z
|
||||
"""
|
||||
use Farmbot.Asset.Schema, path: "/api/points"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/points"
|
||||
|
||||
schema "points" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
defmodule Farmbot.Asset.Private do
|
||||
alias Farmbot.Asset.Repo
|
||||
alias Farmbot.Asset.Private.LocalMeta
|
||||
defmodule FarmbotCore.Asset.Private do
|
||||
alias FarmbotCore.{Asset.Repo, Asset.Private.LocalMeta}
|
||||
|
||||
import Ecto.Query, warn: false
|
||||
import Ecto.Changeset, warn: false
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Private.LocalMeta do
|
||||
defmodule FarmbotCore.Asset.Private.LocalMeta do
|
||||
@moduledoc """
|
||||
Existance of LocalMeta is a hint to Farmbot that
|
||||
an Asset needs to be reconciled with the remote API.
|
||||
|
@ -6,7 +6,8 @@ defmodule Farmbot.Asset.Private.LocalMeta do
|
|||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
alias Farmbot.Asset.{
|
||||
alias FarmbotCore.Asset.{
|
||||
Repo,
|
||||
Device,
|
||||
DiagnosticDump,
|
||||
FarmEvent,
|
||||
|
@ -158,7 +159,7 @@ defmodule Farmbot.Asset.Private.LocalMeta do
|
|||
"farmware_envs",
|
||||
"diagnostic_dumps"
|
||||
])
|
||||
|> unsafe_validate_unique([:table, :asset_local_id], Farmbot.Repo,
|
||||
|> unsafe_validate_unique([:table, :asset_local_id], Repo,
|
||||
message: "LocalMeta already exists."
|
||||
)
|
||||
|> unique_constraint(:table, name: :local_metas_table_asset_local_id_index)
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
defmodule Farmbot.Asset.Regimen do
|
||||
defmodule FarmbotCore.Asset.Regimen do
|
||||
@moduledoc """
|
||||
A Regimen is a schedule to run sequences on.
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/regimens"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/regimens"
|
||||
|
||||
defmodule Item do
|
||||
use Ecto.Schema
|
||||
|
||||
@primary_key false
|
||||
@behaviour Farmbot.Asset.View
|
||||
import Farmbot.Asset.View, only: [view: 2]
|
||||
@behaviour FarmbotCore.Asset.View
|
||||
import FarmbotCore.Asset.View, only: [view: 2]
|
||||
|
||||
view regimen_item do
|
||||
%{
|
||||
|
@ -35,7 +35,7 @@ defmodule Farmbot.Asset.Regimen do
|
|||
schema "regimens" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo do
|
||||
defmodule FarmbotCore.Asset.Repo do
|
||||
@moduledoc "Repo for storing Asset data."
|
||||
use Ecto.Repo, otp_app: :farmbot_core
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Schema do
|
||||
defmodule FarmbotCore.Asset.Schema do
|
||||
@moduledoc """
|
||||
Common Schema attributes.
|
||||
"""
|
||||
|
@ -9,10 +9,10 @@ defmodule Farmbot.Asset.Schema do
|
|||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
@behaviour Farmbot.Asset.Schema
|
||||
@behaviour Farmbot.Asset.View
|
||||
@behaviour FarmbotCore.Asset.Schema
|
||||
@behaviour FarmbotCore.Asset.View
|
||||
|
||||
import Farmbot.Asset.View, only: [view: 2]
|
||||
import FarmbotCore.Asset.View, only: [view: 2]
|
||||
|
||||
@doc "Path on the Farmbot Web API"
|
||||
def path, do: Keyword.fetch!(unquote(opts), :path)
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
defmodule Farmbot.Asset.Sensor do
|
||||
defmodule FarmbotCore.Asset.Sensor do
|
||||
@moduledoc """
|
||||
Sensors are descriptors for pins/modes.
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/sensors"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/sensors"
|
||||
|
||||
schema "sensors" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
defmodule Farmbot.Asset.SensorReading do
|
||||
defmodule FarmbotCore.Asset.SensorReading do
|
||||
@moduledoc """
|
||||
SensorReadings are descriptors for pins/modes.
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/sensor_readings"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/sensor_readings"
|
||||
|
||||
schema "sensor_readings" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,14 +1,14 @@
|
|||
defmodule Farmbot.Asset.Sequence do
|
||||
defmodule FarmbotCore.Asset.Sequence do
|
||||
@moduledoc """
|
||||
Sequences are "code" that FarmbotOS can Execute.
|
||||
Sequences are "code" that FarmbotCoreOS can Execute.
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/sequences"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/sequences"
|
||||
|
||||
schema "sequences" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.Asset.StorageAuth do
|
||||
defmodule FarmbotCore.Asset.StorageAuth do
|
||||
use Ecto.Schema
|
||||
use Farmbot.Asset.Schema, path: "/api/storage_auth"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/storage_auth"
|
||||
|
||||
defmodule FormData do
|
||||
use Ecto.Schema
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
defmodule Farmbot.Asset.Supervisor do
|
||||
defmodule FarmbotCore.Asset.Supervisor do
|
||||
@moduledoc false
|
||||
use Supervisor
|
||||
alias Farmbot.{AssetSupervisor, AssetMonitor}
|
||||
alias FarmbotCore.{AssetSupervisor, AssetMonitor}
|
||||
|
||||
alias Farmbot.Asset.{
|
||||
alias FarmbotCore.Asset.{
|
||||
Repo,
|
||||
Device,
|
||||
FarmEvent,
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
defmodule Elixir.Farmbot.Asset.Sync do
|
||||
defmodule FarmbotCore.Asset.Sync do
|
||||
@moduledoc """
|
||||
"""
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/device/sync"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/device/sync"
|
||||
|
||||
defmodule Item do
|
||||
@moduledoc false
|
||||
use Ecto.Schema
|
||||
|
||||
@primary_key false
|
||||
@behaviour Farmbot.Asset.View
|
||||
import Farmbot.Asset.View, only: [view: 2]
|
||||
@behaviour FarmbotCore.Asset.View
|
||||
import FarmbotCore.Asset.View, only: [view: 2]
|
||||
|
||||
view sync_item do
|
||||
%{
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
defmodule Farmbot.Asset.Tool do
|
||||
defmodule FarmbotCore.Asset.Tool do
|
||||
@moduledoc "A Tool is an item that lives in a ToolSlot"
|
||||
|
||||
use Farmbot.Asset.Schema, path: "/api/tools"
|
||||
use FarmbotCore.Asset.Schema, path: "/api/tools"
|
||||
|
||||
schema "tools" do
|
||||
field(:id, :id)
|
||||
|
||||
has_one(:local_meta, Farmbot.Asset.Private.LocalMeta,
|
||||
has_one(:local_meta, FarmbotCore.Asset.Private.LocalMeta,
|
||||
on_delete: :delete_all,
|
||||
references: :local_id,
|
||||
foreign_key: :asset_local_id
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.View do
|
||||
defmodule FarmbotCore.Asset.View do
|
||||
@doc "Format data to be JSON encodable."
|
||||
@callback render(map) :: map
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
defmodule Farmbot.AssetMonitor do
|
||||
defmodule FarmbotCore.AssetMonitor do
|
||||
use GenServer
|
||||
import Farmbot.TimeUtils, only: [compare_datetimes: 2]
|
||||
import FarmbotCore.TimeUtils, only: [compare_datetimes: 2]
|
||||
|
||||
alias Farmbot.Asset.{
|
||||
alias FarmbotCore.Asset.{
|
||||
Repo,
|
||||
Device,
|
||||
FbosConfig,
|
||||
|
@ -14,6 +14,8 @@ defmodule Farmbot.AssetMonitor do
|
|||
PinBinding
|
||||
}
|
||||
|
||||
alias FarmbotCore.{AssetSupervisor, AssetWorker}
|
||||
|
||||
require Logger
|
||||
|
||||
@checkup_time_ms Application.get_env(:farmbot_core, __MODULE__)[:checkup_time_ms]
|
||||
|
@ -73,7 +75,7 @@ defmodule Farmbot.AssetMonitor do
|
|||
|
||||
Enum.each(deleted_ids, fn local_id ->
|
||||
Logger.error("#{inspect(kind)} #{local_id} needs to be terminated")
|
||||
Farmbot.AssetSupervisor.terminate_child(kind, local_id)
|
||||
AssetSupervisor.terminate_child(kind, local_id)
|
||||
end)
|
||||
|
||||
Enum.reduce(expected, sub_state, fn %{local_id: id, updated_at: updated_at} = asset,
|
||||
|
@ -85,14 +87,14 @@ defmodule Farmbot.AssetMonitor do
|
|||
|
||||
is_nil(sub_state[id]) ->
|
||||
Logger.debug("#{inspect(kind)} #{id} needs to be started")
|
||||
asset = Repo.preload(asset, Farmbot.AssetWorker.preload(asset))
|
||||
:ok = Farmbot.AssetSupervisor.start_child(asset) |> assert_result!(asset)
|
||||
asset = Repo.preload(asset, AssetWorker.preload(asset))
|
||||
:ok = AssetSupervisor.start_child(asset) |> assert_result!(asset)
|
||||
Map.put(sub_state, id, updated_at)
|
||||
|
||||
compare_datetimes(updated_at, sub_state[id]) == :gt ->
|
||||
Logger.warn("#{inspect(kind)} #{id} needs to be updated")
|
||||
asset = Repo.preload(asset, Farmbot.AssetWorker.preload(asset))
|
||||
:ok = Farmbot.AssetSupervisor.update_child(asset) |> assert_result!(asset)
|
||||
asset = Repo.preload(asset, AssetWorker.preload(asset))
|
||||
:ok = AssetSupervisor.update_child(asset) |> assert_result!(asset)
|
||||
Map.put(sub_state, id, updated_at)
|
||||
|
||||
true ->
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.AssetSupervisor do
|
||||
defmodule FarmbotCore.AssetSupervisor do
|
||||
use Supervisor
|
||||
alias Farmbot.{Asset.Repo, AssetWorker}
|
||||
alias FarmbotCore.{Asset.Repo, AssetWorker}
|
||||
|
||||
@doc "List all children for an asset"
|
||||
def list_children(kind) do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defprotocol Farmbot.AssetWorker do
|
||||
defprotocol FarmbotCore.AssetWorker do
|
||||
@doc "List of relational resources that need to be preloaded."
|
||||
def preload(asset)
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.Device do
|
||||
alias Farmbot.Asset.Device
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.Device do
|
||||
alias FarmbotCore.Asset.Device
|
||||
use GenServer
|
||||
|
||||
def preload(%Device{}), do: []
|
||||
|
|
|
@ -1,15 +1,15 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmEvent do
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.FarmEvent do
|
||||
use GenServer
|
||||
require Logger
|
||||
|
||||
alias Farmbot.{
|
||||
alias FarmbotCore.{
|
||||
Asset,
|
||||
Asset.FarmEvent,
|
||||
Asset.Regimen,
|
||||
Asset.Sequence
|
||||
}
|
||||
|
||||
alias Farmbot.CeleryScript.Scheduler
|
||||
alias FarmbotCeleryScript.Scheduler
|
||||
|
||||
defstruct [:farm_event, :datetime, :handle_sequence, :handle_regimen]
|
||||
alias __MODULE__, as: State
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareEnv do
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.FarmwareEnv do
|
||||
use GenServer
|
||||
|
||||
alias Farmbot.Asset.FarmwareEnv
|
||||
alias FarmbotCore.{Asset.FarmwareEnv, BotState}
|
||||
|
||||
def preload(%FarmwareEnv{}), do: []
|
||||
|
||||
|
@ -14,7 +14,7 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareEnv do
|
|||
end
|
||||
|
||||
def handle_info(:timeout, %FarmwareEnv{key: key, value: value} = env) do
|
||||
:ok = Farmbot.BotState.set_user_env(key, value)
|
||||
:ok = BotState.set_user_env(key, value)
|
||||
{:noreply, env, :hibernate}
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareInstallation do
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.FarmwareInstallation do
|
||||
use GenServer
|
||||
require Farmbot.Logger
|
||||
require FarmbotCore.Logger
|
||||
|
||||
alias Farmbot.Asset.Repo
|
||||
alias Farmbot.Asset.FarmwareInstallation, as: FWI
|
||||
alias FarmbotCore.{Asset.Repo, JSON}
|
||||
alias FarmbotCore.Asset.FarmwareInstallation, as: FWI
|
||||
|
||||
config = Application.get_env(:farmbot_core, __MODULE__)
|
||||
@install_dir config[:install_dir] || Mix.raise("Missing Install Dir")
|
||||
|
@ -21,7 +21,7 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareInstallation do
|
|||
end
|
||||
|
||||
def handle_info(:timeout, %FWI{manifest: nil} = fwi) do
|
||||
Farmbot.Logger.busy(3, "Installing Farmware from url: #{fwi.url}")
|
||||
FarmbotCore.Logger.busy(3, "Installing Farmware from url: #{fwi.url}")
|
||||
|
||||
with {:ok, %{} = manifest} <- get_manifest_json(fwi),
|
||||
%{valid?: true} = changeset <- FWI.changeset(fwi, %{manifest: manifest}),
|
||||
|
@ -93,30 +93,30 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareInstallation do
|
|||
end
|
||||
|
||||
def get_manifest_json(%FWI{url: "file://" <> path}) do
|
||||
Farmbot.Logger.debug(1, "Using local directory for Farmware manifest")
|
||||
FarmbotCore.Logger.debug(1, "Using local directory for Farmware manifest")
|
||||
|
||||
case File.read(Path.join(Path.expand(path), @manifest_name)) do
|
||||
{:ok, data} -> Farmbot.JSON.decode(data)
|
||||
{:ok, data} -> JSON.decode(data)
|
||||
err -> err
|
||||
end
|
||||
end
|
||||
|
||||
def get_manifest_json(%FWI{url: url}) do
|
||||
with {:ok, {{_, 200, _}, _headers, data}} <- get(url) do
|
||||
Farmbot.JSON.decode(data)
|
||||
JSON.decode(data)
|
||||
end
|
||||
end
|
||||
|
||||
def load_manifest_json(%FWI{manifest: %{}} = fwi) do
|
||||
with {:ok, data} <- File.read(Path.join(install_dir(fwi), @manifest_name)) do
|
||||
Farmbot.JSON.decode(data)
|
||||
JSON.decode(data)
|
||||
end
|
||||
end
|
||||
|
||||
def get_zip(%FWI{manifest: %{zip: url}}), do: get_zip(url)
|
||||
|
||||
def get_zip("file://" <> path) do
|
||||
Farmbot.Logger.debug(1, "Using local directory for Farmware zip")
|
||||
FarmbotCore.Logger.debug(1, "Using local directory for Farmware zip")
|
||||
|
||||
with {:ok, files} <- File.ls(path),
|
||||
file_list <-
|
||||
|
@ -147,7 +147,7 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareInstallation do
|
|||
end
|
||||
|
||||
defp write_manifest(%FWI{manifest: manifest} = fwi) do
|
||||
json = FWI.Manifest.view(manifest) |> Farmbot.JSON.encode!()
|
||||
json = FWI.Manifest.view(manifest) |> JSON.encode!()
|
||||
|
||||
fwi
|
||||
|> install_dir()
|
||||
|
@ -194,12 +194,12 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareInstallation do
|
|||
def get_tools_zip_url(release_url) do
|
||||
case get(release_url) do
|
||||
{:ok, {{_, 200, _}, _, msg}} ->
|
||||
release = Farmbot.JSON.decode!(msg)
|
||||
release = JSON.decode!(msg)
|
||||
release_commit = release["target_commitish"]
|
||||
{:ok, {release_commit, release["zipball_url"]}}
|
||||
|
||||
{:ok, {{_, _, _}, _, msg}} ->
|
||||
case Farmbot.JSON.decode(msg) do
|
||||
case JSON.decode(msg) do
|
||||
{:ok, %{"message" => message}} -> {:error, message}
|
||||
_ -> {:error, msg}
|
||||
end
|
||||
|
@ -227,18 +227,18 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FarmwareInstallation do
|
|||
end
|
||||
|
||||
defp error_log(%FWI{manifest: %{package: package}}, msg) do
|
||||
Farmbot.Logger.error(3, "Farmware #{package} " <> msg)
|
||||
FarmbotCore.Logger.error(3, "Farmware #{package} " <> msg)
|
||||
end
|
||||
|
||||
defp error_log(%FWI{}, msg) do
|
||||
Farmbot.Logger.error(3, "Farmware " <> msg)
|
||||
FarmbotCore.Logger.error(3, "Farmware " <> msg)
|
||||
end
|
||||
|
||||
defp success_log(%FWI{manifest: %{package: package}}, msg) do
|
||||
Farmbot.Logger.success(3, "Farmware #{package} " <> msg)
|
||||
FarmbotCore.Logger.success(3, "Farmware #{package} " <> msg)
|
||||
end
|
||||
|
||||
defp success_log(%FWI{}, msg) do
|
||||
Farmbot.Logger.success(3, "Farmware " <> msg)
|
||||
FarmbotCore.Logger.success(3, "Farmware " <> msg)
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,11 +1,10 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.FbosConfig do
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.FbosConfig do
|
||||
use GenServer
|
||||
require Logger
|
||||
|
||||
alias Farmbot.Asset.FbosConfig
|
||||
alias Farmbot.BotState
|
||||
alias FarmbotCore.{Asset.FbosConfig, BotState}
|
||||
|
||||
import Farmbot.Config,
|
||||
import FarmbotCore.Config,
|
||||
only: [
|
||||
get_config_value: 3,
|
||||
update_config_value: 4
|
||||
|
|
|
@ -1,8 +1,10 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.Peripheral do
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.Peripheral do
|
||||
use GenServer
|
||||
require Farmbot.Logger
|
||||
require FarmbotCore.Logger
|
||||
|
||||
alias FarmbotCore.{Asset.Peripheral}
|
||||
alias FarmbotCeleryScript.{AST, Scheduler}
|
||||
|
||||
alias Farmbot.{Asset.Peripheral, CeleryScript.Scheduler, CeleryScript.AST}
|
||||
@retry_ms 1_000
|
||||
|
||||
@impl true
|
||||
|
@ -20,24 +22,24 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.Peripheral do
|
|||
|
||||
@impl true
|
||||
def handle_info(:timeout, %{peripheral: peripheral} = state) do
|
||||
Farmbot.Logger.busy(2, "Read peripheral: #{peripheral.label}")
|
||||
FarmbotCore.Logger.busy(2, "Read peripheral: #{peripheral.label}")
|
||||
rpc = peripheral_to_rpc(peripheral)
|
||||
{:ok, ref} = Scheduler.schedule(rpc)
|
||||
{:noreply, %{state | peripheral: peripheral, scheduled_ref: ref}}
|
||||
end
|
||||
|
||||
def handle_info({Scheduler, ref, :ok}, %{peripheral: peripheral, scheduled_ref: ref} = state) do
|
||||
Farmbot.Logger.success(2, "Read peripheral: #{peripheral.label} ok")
|
||||
FarmbotCore.Logger.success(2, "Read peripheral: #{peripheral.label} ok")
|
||||
{:noreply, state, :hibernate}
|
||||
end
|
||||
|
||||
def handle_info({Scheduler, ref, {:error, reason}}, %{peripheral: peripheral, scheduled_ref: ref, errors: 5} = state) do
|
||||
Farmbot.Logger.error(1, "Read peripheral: #{peripheral.label} error: #{reason} errors=5 not trying again.")
|
||||
FarmbotCore.Logger.error(1, "Read peripheral: #{peripheral.label} error: #{reason} errors=5 not trying again.")
|
||||
{:noreply, state, :hibernate}
|
||||
end
|
||||
|
||||
def handle_info({Scheduler, ref, {:error, reason}}, %{peripheral: peripheral, scheduled_ref: ref} = state) do
|
||||
Farmbot.Logger.error(1, "Read peripheral: #{peripheral.label} error: #{reason} errors=#{state.errors}")
|
||||
FarmbotCore.Logger.error(1, "Read peripheral: #{peripheral.label} error: #{reason} errors=#{state.errors}")
|
||||
{:noreply, %{state | scheduled_ref: nil, errors: state.errors + 1}, @retry_ms}
|
||||
end
|
||||
|
||||
|
|
|
@ -1,11 +1,11 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.PersistentRegimen do
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PersistentRegimen do
|
||||
use GenServer
|
||||
require Logger
|
||||
require Farmbot.Logger
|
||||
require FarmbotCore.Logger
|
||||
|
||||
alias Farmbot.Asset
|
||||
alias Farmbot.Asset.{PersistentRegimen, FarmEvent, Regimen}
|
||||
alias Farmbot.CeleryScript.Scheduler
|
||||
alias FarmbotCore.Asset
|
||||
alias FarmbotCore.Asset.{PersistentRegimen, FarmEvent, Regimen}
|
||||
alias FarmbotCeleryScript.Scheduler
|
||||
|
||||
@checkup_time_ms Application.get_env(:farmbot_core, __MODULE__)[:checkup_time_ms]
|
||||
@checkup_time_ms ||
|
||||
|
@ -83,7 +83,7 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.PersistentRegimen do
|
|||
end
|
||||
|
||||
defp calculate_next(%{regimen: %{regimen_items: []}} = pr, _) do
|
||||
Farmbot.Logger.success(1, "#{pr.regimen.name || "regimen"} has no more items.")
|
||||
FarmbotCore.Logger.success(1, "#{pr.regimen.name || "regimen"} has no more items.")
|
||||
{:noreply, pr, :hibernate}
|
||||
end
|
||||
|
||||
|
|
|
@ -1,16 +1,16 @@
|
|||
defimpl Farmbot.AssetWorker, for: Farmbot.Asset.PinBinding do
|
||||
defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PinBinding do
|
||||
use GenServer
|
||||
require Logger
|
||||
require Farmbot.Logger
|
||||
require FarmbotCore.Logger
|
||||
|
||||
alias Farmbot.{
|
||||
CeleryScript.AST,
|
||||
CeleryScript.Scheduler,
|
||||
alias FarmbotCore.{
|
||||
Asset.PinBinding,
|
||||
Asset.Sequence,
|
||||
Asset
|
||||
}
|
||||
|
||||
alias FarmbotCeleryScript.{AST, Scheduler}
|
||||
|
||||
@error_retry_time_ms Application.get_env(:farmbot_core, __MODULE__)[:error_retry_time_ms]
|
||||
|
||||
@gpio_handler Application.get_env(:farmbot_core, __MODULE__)[:gpio_handler]
|
||||
|
@ -64,7 +64,7 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.PinBinding do
|
|||
{:noreply, %{state | scheduled_ref: ref}, :hibernate}
|
||||
|
||||
nil ->
|
||||
Farmbot.Logger.error(1, "Failed to find assosiated Sequence for: #{pin_binding}")
|
||||
FarmbotCore.Logger.error(1, "Failed to find assosiated Sequence for: #{pin_binding}")
|
||||
{:noreply, state, :hibernate}
|
||||
end
|
||||
end
|
||||
|
@ -142,7 +142,7 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.PinBinding do
|
|||
end
|
||||
|
||||
def handle_cast(:trigger, %{pin_binding: pin_binding} = state) do
|
||||
Farmbot.Logger.error(1, "Unknown PinBinding: #{pin_binding}")
|
||||
FarmbotCore.Logger.error(1, "Unknown PinBinding: #{pin_binding}")
|
||||
{:noreply, state, :hibernate}
|
||||
end
|
||||
|
||||
|
@ -176,7 +176,7 @@ defimpl Farmbot.AssetWorker, for: Farmbot.Asset.PinBinding do
|
|||
|
||||
def handle_info({Scheduler, ref, {:error, reason}}, %{scheduled_ref: ref} = state) do
|
||||
pin_binding = state.pin_binding
|
||||
Farmbot.Logger.error(1, "PinBinding: #{pin_binding} failed to execute: #{reason}")
|
||||
FarmbotCore.Logger.error(1, "PinBinding: #{pin_binding} failed to execute: #{reason}")
|
||||
{:noreply, state, :hibernate}
|
||||
end
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.PinBindingWorker.StubGPIOHandler do
|
||||
defmodule FarmbotCore.PinBindingWorker.StubGPIOHandler do
|
||||
@moduledoc "Stub gpio handler for PinBindings"
|
||||
@behaviour Farmbot.AssetWorker.Farmbot.Asset.PinBinding
|
||||
@behaviour FarmbotCore.AssetWorker.FarmbotCore.Asset.PinBinding
|
||||
require Logger
|
||||
use GenServer
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.BotState do
|
||||
defmodule FarmbotCore.BotState do
|
||||
@moduledoc "Central State accumulator."
|
||||
alias Farmbot.BotStateNG
|
||||
alias FarmbotCore.BotStateNG
|
||||
use GenServer
|
||||
|
||||
@doc "Subscribe to BotState changes"
|
||||
|
|
|
@ -1,22 +1,22 @@
|
|||
defmodule Farmbot.BotState.FileSystem do
|
||||
defmodule FarmbotCore.BotState.FileSystem do
|
||||
@moduledoc """
|
||||
Serializes Farmbot's state into a location on a filesystem.
|
||||
"""
|
||||
|
||||
use GenServer
|
||||
alias Farmbot.BotState
|
||||
alias FarmbotCore.BotState
|
||||
|
||||
@root_dir Application.get_env(:farmbot_core, __MODULE__)[:root_dir]
|
||||
@sleep_time Application.get_env(:farmbot_core, __MODULE__)[:sleep_time]
|
||||
@root_dir ||
|
||||
Mix.raise("""
|
||||
config :farmbot_core, Farmbot.BotState.FileSystem,
|
||||
config :farmbot_core, Farmbot.BotState.FileSystem,
|
||||
root_dir: "/tmp/farmbot_state"
|
||||
""")
|
||||
|
||||
@sleep_time ||
|
||||
Mix.raise("""
|
||||
config :farmbot_core, Farmbot.BotState.FileSystem,
|
||||
config :farmbot_core, Farmbot.BotState.FileSystem,
|
||||
sleep_time: 200
|
||||
""")
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.BotState.JobProgress do
|
||||
defmodule FarmbotCore.BotState.JobProgress do
|
||||
@moduledoc "Interface for job progress."
|
||||
|
||||
@typedoc "Unit of the job."
|
||||
|
@ -6,6 +6,8 @@ defmodule Farmbot.BotState.JobProgress do
|
|||
@typedoc "Status of the job."
|
||||
@type status :: :working | :complete | :error
|
||||
|
||||
alias FarmbotCore.BotState.JobProgress
|
||||
|
||||
defmodule Percent do
|
||||
@moduledoc "Percent job."
|
||||
defstruct status: :working, percent: 0, unit: :percent, type: :ota, time: nil, file_type: nil
|
||||
|
@ -17,7 +19,7 @@ defmodule Farmbot.BotState.JobProgress do
|
|||
end
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
status: Farmbot.BotState.JobProgress.status(),
|
||||
status: JobProgress.status(),
|
||||
percent: integer,
|
||||
unit: :percent,
|
||||
type: :image | :ota,
|
||||
|
@ -37,7 +39,7 @@ defmodule Farmbot.BotState.JobProgress do
|
|||
end
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
status: Farmbot.BotState.JobProgress.status(),
|
||||
status: JobProgress.status(),
|
||||
bytes: integer,
|
||||
unit: :bytes,
|
||||
type: :image | :ota,
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
defmodule Farmbot.BotStateNG do
|
||||
alias Farmbot.{
|
||||
defmodule FarmbotCore.BotStateNG do
|
||||
alias FarmbotCore.{
|
||||
BotStateNG,
|
||||
BotStateNG.McuParams,
|
||||
BotStateNG.LocationData,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.BotStateNG.ChangeGenerator do
|
||||
defmodule FarmbotCore.BotStateNG.ChangeGenerator do
|
||||
@moduledoc """
|
||||
Takes a map and returns instructions on how to construct that data.
|
||||
"""
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.BotStateNG.Configuration do
|
||||
defmodule FarmbotCore.BotStateNG.Configuration do
|
||||
@moduledoc false
|
||||
alias Farmbot.BotStateNG.Configuration
|
||||
alias FarmbotCore.BotStateNG.Configuration
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
defmodule Farmbot.BotStateNG.InformationalSettings do
|
||||
defmodule FarmbotCore.BotStateNG.InformationalSettings do
|
||||
@moduledoc false
|
||||
alias Farmbot.BotStateNG.InformationalSettings
|
||||
alias FarmbotCore.BotStateNG.InformationalSettings
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
alias Farmbot.Project
|
||||
alias FarmbotCore.Project
|
||||
|
||||
@primary_key false
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.BotStateNG.LocationData do
|
||||
defmodule FarmbotCore.BotStateNG.LocationData do
|
||||
@moduledoc false
|
||||
alias Farmbot.BotStateNG.LocationData
|
||||
alias FarmbotCore.BotStateNG.LocationData
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.BotStateNG.McuParams do
|
||||
defmodule FarmbotCore.BotStateNG.McuParams do
|
||||
@moduledoc false
|
||||
alias Farmbot.BotStateNG.McuParams
|
||||
alias FarmbotCore.BotStateNG.McuParams
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.BotStateNG.ProcessInfo do
|
||||
defmodule FarmbotCore.BotStateNG.ProcessInfo do
|
||||
@moduledoc false
|
||||
alias Farmbot.BotStateNG.ProcessInfo
|
||||
alias FarmbotCore.BotStateNG.ProcessInfo
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
defmodule Farmbot.BotStateNG.Schema2Docs do
|
||||
alias Farmbot.BotStateNG
|
||||
defmodule FarmbotCore.BotStateNG.Schema2Docs do
|
||||
alias FarmbotCore.BotStateNG
|
||||
|
||||
def schema_to_ts do
|
||||
ts =
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Config.BoolValue do
|
||||
defmodule FarmbotCore.Config.BoolValue do
|
||||
@moduledoc false
|
||||
|
||||
use Ecto.Schema
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
defmodule Farmbot.Config.Config do
|
||||
defmodule FarmbotCore.Config.Config do
|
||||
@moduledoc false
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Farmbot.Config.{Group, BoolValue, FloatValue, StringValue}
|
||||
alias FarmbotCore.Config.{Group, BoolValue, FloatValue, StringValue}
|
||||
|
||||
schema "configs" do
|
||||
belongs_to(:group, Group)
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
defmodule Farmbot.Config do
|
||||
defmodule FarmbotCore.Config do
|
||||
@moduledoc "API for accessing config data."
|
||||
|
||||
alias Farmbot.Config.{
|
||||
alias FarmbotCore.Config.{
|
||||
Repo,
|
||||
Config, Group, BoolValue, FloatValue, StringValue, NetworkInterface
|
||||
}
|
||||
|
@ -10,7 +10,7 @@ defmodule Farmbot.Config do
|
|||
|
||||
@doc "Input a network config. Takes many settings as a map."
|
||||
def input_network_config!(%{} = config) do
|
||||
Farmbot.Config.destroy_all_network_configs()
|
||||
FarmbotCore.Config.destroy_all_network_configs()
|
||||
data = struct(NetworkInterface, config)
|
||||
Repo.insert!(data)
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Config.FloatValue do
|
||||
defmodule FarmbotCore.Config.FloatValue do
|
||||
@moduledoc false
|
||||
|
||||
use Ecto.Schema
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Config.Group do
|
||||
defmodule FarmbotCore.Config.Group do
|
||||
@moduledoc false
|
||||
|
||||
use Ecto.Schema
|
||||
|
|
|
@ -1,9 +1,9 @@
|
|||
defmodule Farmbot.Config.MigrationHelpers do
|
||||
defmodule FarmbotCore.Config.MigrationHelpers do
|
||||
@moduledoc false
|
||||
|
||||
# This is pretty bad practice, but i don't plan on really changing it at all.
|
||||
|
||||
alias Farmbot.Config
|
||||
alias FarmbotCore.Config
|
||||
alias Config.{Repo, Config, StringValue, BoolValue, FloatValue}
|
||||
import Ecto.Query
|
||||
|
||||
|
|
|
@ -1,9 +1,8 @@
|
|||
defmodule Farmbot.Config.NetworkInterface do
|
||||
defmodule FarmbotCore.Config.NetworkInterface do
|
||||
@moduledoc false
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
require Farmbot.Logger
|
||||
|
||||
schema "network_interfaces" do
|
||||
field(:name, :string, null: false)
|
||||
|
@ -36,16 +35,16 @@ defmodule Farmbot.Config.NetworkInterface do
|
|||
|
||||
def changeset(config, params \\ %{}) do
|
||||
config
|
||||
|> cast(params, @required_fields ++ [:ssid,
|
||||
:psk,
|
||||
|> cast(params, @required_fields ++ [:ssid,
|
||||
:psk,
|
||||
:security,
|
||||
:identity,
|
||||
:password,
|
||||
:ipv4_method,
|
||||
:ipv4_address,
|
||||
:ipv4_gateway,
|
||||
:ipv4_subnet_mask,
|
||||
:domain,
|
||||
:ipv4_method,
|
||||
:ipv4_address,
|
||||
:ipv4_gateway,
|
||||
:ipv4_subnet_mask,
|
||||
:domain,
|
||||
:name_servers
|
||||
])
|
||||
|> validate_required(@required_fields)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Config.Repo do
|
||||
defmodule FarmbotCore.Config.Repo do
|
||||
@moduledoc "Repo for storing config data."
|
||||
use Ecto.Repo, otp_app: :farmbot_core,
|
||||
adapter: Application.get_env(:farmbot_core, __MODULE__)[:adapter]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Config.StringValue do
|
||||
defmodule FarmbotCore.Config.StringValue do
|
||||
@moduledoc false
|
||||
|
||||
use Ecto.Schema
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Config.Supervisor do
|
||||
defmodule FarmbotCore.Config.Supervisor do
|
||||
@moduledoc false
|
||||
use Supervisor
|
||||
|
||||
|
@ -8,7 +8,7 @@ defmodule Farmbot.Config.Supervisor do
|
|||
|
||||
def init([]) do
|
||||
children = [
|
||||
{Farmbot.Config.Repo, []},
|
||||
{FarmbotCore.Config.Repo, []},
|
||||
]
|
||||
Supervisor.init(children, strategy: :one_for_one)
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.EctoMigrator do
|
||||
defmodule FarmbotCore.EctoMigrator do
|
||||
def child_spec(_opts) do
|
||||
%{
|
||||
id: __MODULE__,
|
||||
|
@ -17,16 +17,16 @@ defmodule Farmbot.EctoMigrator do
|
|||
:ignore
|
||||
end
|
||||
|
||||
def migrate(Farmbot.Asset.Repo) do
|
||||
migrate(Farmbot.Asset.Repo, Path.join([:code.priv_dir(:farmbot_core), "asset", "migrations"]))
|
||||
def migrate(FarmbotCore.Asset.Repo) do
|
||||
migrate(FarmbotCore.Asset.Repo, Path.join([:code.priv_dir(:farmbot_core), "asset", "migrations"]))
|
||||
end
|
||||
|
||||
def migrate(Farmbot.Logger.Repo) do
|
||||
migrate(Farmbot.Logger.Repo, Path.join([:code.priv_dir(:farmbot_core), "logger", "migrations"]))
|
||||
def migrate(FarmbotCore.Logger.Repo) do
|
||||
migrate(FarmbotCore.Logger.Repo, Path.join([:code.priv_dir(:farmbot_core), "logger", "migrations"]))
|
||||
end
|
||||
|
||||
def migrate(Farmbot.Config.Repo) do
|
||||
migrate(Farmbot.Config.Repo, Path.join([:code.priv_dir(:farmbot_core), "config", "migrations"]))
|
||||
def migrate(FarmbotCore.Config.Repo) do
|
||||
migrate(FarmbotCore.Config.Repo, Path.join([:code.priv_dir(:farmbot_core), "config", "migrations"]))
|
||||
end
|
||||
|
||||
def migrate(repo, migrations_path) do
|
||||
|
|
|
@ -1,23 +1,25 @@
|
|||
defmodule Farmbot.FarmwareRuntime do
|
||||
defmodule FarmbotCore.FarmwareRuntime do
|
||||
@moduledoc """
|
||||
Handles execution of Farmware plugins.
|
||||
Handles execution of Farmware plugins.
|
||||
"""
|
||||
|
||||
alias Farmbot.FarmwareRuntime.PipeWorker
|
||||
alias Farmbot.CeleryScript.AST
|
||||
alias Farmbot.AssetWorker.Farmbot.Asset.FarmwareInstallation
|
||||
alias Farmbot.Asset.FarmwareInstallation.Manifest
|
||||
alias FarmbotCeleryScript.AST
|
||||
alias FarmbotCore.{FarmwareRuntime, FarmwareRuntime.PipeWorker}
|
||||
alias FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmwareInstallation
|
||||
alias FarmbotCore.Asset.FarmwareInstallation.Manifest
|
||||
alias FarmbotCore.BotState.FileSystem
|
||||
alias FarmbotCore.Project
|
||||
import FarmwareInstallation, only: [install_dir: 1]
|
||||
|
||||
alias Farmbot.{Asset, JSON}
|
||||
import Farmbot.Config, only: [get_config_value: 3]
|
||||
alias FarmbotCore.{Asset, JSON}
|
||||
import FarmbotCore.Config, only: [get_config_value: 3]
|
||||
require Logger
|
||||
|
||||
@error_timeout_ms 5000
|
||||
@runtime_dir Application.get_env(:farmbot_core, __MODULE__)[:runtime_dir]
|
||||
@runtime_dir ||
|
||||
Mix.raise("""
|
||||
config :farmbot_core, Farmbot.FarmwareRuntime,
|
||||
config :farmbot_core, FarmwareRuntime,
|
||||
runtime_dir: "/tmp/farmware_runtime"
|
||||
""")
|
||||
|
||||
|
@ -55,7 +57,7 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
|
||||
def stub(farmware_name) do
|
||||
manifest = Asset.get_farmware_manifest(farmware_name) || raise("not found")
|
||||
{:ok, pid} = Farmbot.FarmwareRuntime.start_link(manifest)
|
||||
{:ok, pid} = FarmwareRuntime.start_link(manifest)
|
||||
Process.flag(:trap_exit, true)
|
||||
stub_loop(pid)
|
||||
end
|
||||
|
@ -65,11 +67,11 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
{:EXIT, ^pid, reason} -> reason
|
||||
after
|
||||
100 ->
|
||||
case Farmbot.FarmwareRuntime.process_rpc(pid) do
|
||||
case FarmwareRuntime.process_rpc(pid) do
|
||||
{:ok, %{args: %{label: label}} = rpc} ->
|
||||
IO.puts("Stup processing #{inspect(rpc)}")
|
||||
response = %AST{kind: :rpc_ok, args: %{label: label}, body: []}
|
||||
true = Farmbot.FarmwareRuntime.rpc_processed(pid, response)
|
||||
true = FarmwareRuntime.rpc_processed(pid, response)
|
||||
stub_loop(pid)
|
||||
|
||||
{:error, :no_rpc} ->
|
||||
|
@ -88,7 +90,7 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
end
|
||||
|
||||
@doc """
|
||||
Calls the Farmware Runtime telling it that an RPC has been processed.
|
||||
Calls the Farmware Runtime telling it that an RPC has been processed.
|
||||
"""
|
||||
def rpc_processed(pid, response) do
|
||||
GenServer.call(pid, {:rpc_processed, response})
|
||||
|
@ -164,10 +166,10 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
end
|
||||
|
||||
# If we are in the `process_request` state, send the RPC out to be buffered.
|
||||
# This moves us to the `send_response` state. (which has _no_ timeout)
|
||||
# This moves us to the `send_response` state. (which has _no_ timeout)
|
||||
def handle_call(:process_rpc, {pid, _} = _from, %{context: :process_request, rpc: rpc} = state) do
|
||||
# Link the calling process
|
||||
# so the Farmware can exit if the rpc never gets processed.
|
||||
# so the Farmware can exit if the rpc never gets processed.
|
||||
_ = Process.link(pid)
|
||||
{:reply, {:ok, rpc}, %{state | rpc: nil, context: :send_response}}
|
||||
end
|
||||
|
@ -182,7 +184,7 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
_ = Process.unlink(pid)
|
||||
ipc = add_header(result)
|
||||
reply = PipeWorker.write(state.response_pipe_handle, ipc)
|
||||
# Make sure to `timeout` after this one to go back to the
|
||||
# Make sure to `timeout` after this one to go back to the
|
||||
# get_header context. This will cause another rpc to be processed.
|
||||
{:reply, reply, %{state | rpc: nil, context: :get_header}, 0}
|
||||
end
|
||||
|
@ -243,21 +245,21 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
end
|
||||
|
||||
# Pipe reads are done async because reading will block the entire
|
||||
# process from receiving more messages as well as
|
||||
# prevent the processes from terminating.
|
||||
# process from receiving more messages as well as
|
||||
# prevent the processes from terminating.
|
||||
# this means if a Farmware never opens the pipe
|
||||
# (a valid use case), When the Farmware completes
|
||||
# the pipe will still be waiting for information
|
||||
# and prevent the pipes from closing.
|
||||
# and prevent the pipes from closing.
|
||||
defp async_request_pipe_read(state, size) do
|
||||
mon = PipeWorker.read(state.request_pipe_handle, size)
|
||||
%{state | mon: mon}
|
||||
end
|
||||
|
||||
# When a packet arives, buffer it until
|
||||
# When a packet arives, buffer it until
|
||||
# the controlling process (the CSVM) picks it up.
|
||||
# there is a timeout for how long a packet will wait to be collected,
|
||||
# but no time limit to how long it will take to
|
||||
# but no time limit to how long it will take to
|
||||
# process the packet.
|
||||
def handle_packet(packet, state) do
|
||||
with {:ok, data} <- JSON.decode(packet),
|
||||
|
@ -288,7 +290,7 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
token = get_config_value(:string, "authorization", "token")
|
||||
images_dir = "/tmp/images"
|
||||
installation_path = install_dir(manifest)
|
||||
state_root_dir = Application.get_env(:farmbot_core, Farmbot.BotState.FileSystem)[:root_dir]
|
||||
state_root_dir = Application.get_env(:farmbot_core, FileSystem)[:root_dir]
|
||||
|
||||
base =
|
||||
Map.new()
|
||||
|
@ -296,7 +298,7 @@ defmodule Farmbot.FarmwareRuntime do
|
|||
|> Map.put("FARMWARE_API_V2_RESPONSE_PIPE", response_pipe)
|
||||
|> Map.put("FARMBOT_API_TOKEN", token)
|
||||
|> Map.put("FARMBOT_OS_IMAGES_DIR", images_dir)
|
||||
|> Map.put("FARMBOT_OS_VERSION", Farmbot.Project.version())
|
||||
|> Map.put("FARMBOT_OS_VERSION", Project.version())
|
||||
|> Map.put("FARMBOT_OS_STATE_DIR", state_root_dir)
|
||||
|> Map.put("PYTHONPATH", installation_path)
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.FarmwareRuntime.PipeWorker do
|
||||
defmodule FarmbotCore.FarmwareRuntime.PipeWorker do
|
||||
@moduledoc """
|
||||
Proxy for Pipe IO operations.
|
||||
"""
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Core.FirmwareEstopTimer do
|
||||
defmodule FarmbotCore.FirmwareEstopTimer do
|
||||
@moduledoc """
|
||||
Process that wraps a `Process.send_after/3` call.
|
||||
When `:timeout` is received, a `fatal_email` log message will be
|
||||
|
@ -6,7 +6,7 @@ defmodule Farmbot.Core.FirmwareEstopTimer do
|
|||
"""
|
||||
|
||||
use GenServer
|
||||
require Farmbot.Logger
|
||||
require FarmbotCore.Logger
|
||||
|
||||
@msg "Farmbot has been E-Stopped for more than 10 minutes."
|
||||
|
||||
|
@ -54,5 +54,5 @@ defmodule Farmbot.Core.FirmwareEstopTimer do
|
|||
end
|
||||
|
||||
@doc false
|
||||
def do_log, do: Farmbot.Logger.warn(1, @msg, channels: [:fatal_email])
|
||||
def do_log, do: FarmbotCore.Logger.warn(1, @msg, channels: [:fatal_email])
|
||||
end
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
defmodule Farmbot.Core.FirmwareSideEffects do
|
||||
defmodule FarmbotCore.FirmwareSideEffects do
|
||||
@moduledoc "Handles firmware data and syncing it with BotState."
|
||||
@behaviour Farmbot.Firmware.SideEffects
|
||||
alias Farmbot.Core.FirmwareEstopTimer
|
||||
@behaviour FarmbotFirmware.SideEffects
|
||||
require Logger
|
||||
require Farmbot.Logger
|
||||
require FarmbotCore.Logger
|
||||
alias FarmbotCore.{Asset, BotState, FirmwareEstopTimer}
|
||||
|
||||
def handle_position(x: x, y: y, z: z) do
|
||||
:ok = Farmbot.BotState.set_position(x, y, z)
|
||||
:ok = BotState.set_position(x, y, z)
|
||||
end
|
||||
|
||||
def handle_position_change([{_axis, _value}]) do
|
||||
|
@ -22,23 +22,23 @@ defmodule Farmbot.Core.FirmwareSideEffects do
|
|||
end
|
||||
|
||||
def handle_encoders_scaled(x: x, y: y, z: z) do
|
||||
:ok = Farmbot.BotState.set_encoders_scaled(x, y, z)
|
||||
:ok = BotState.set_encoders_scaled(x, y, z)
|
||||
end
|
||||
|
||||
def handle_encoders_raw(x: x, y: y, z: z) do
|
||||
:ok = Farmbot.BotState.set_encoders_raw(x, y, z)
|
||||
:ok = BotState.set_encoders_raw(x, y, z)
|
||||
end
|
||||
|
||||
def handle_paramater_value([{param, value}]) do
|
||||
:ok = Farmbot.BotState.set_firmware_config(param, value)
|
||||
:ok = BotState.set_firmware_config(param, value)
|
||||
end
|
||||
|
||||
def handle_pin_value(p: pin, v: value) do
|
||||
:ok = Farmbot.BotState.set_pin_value(pin, value)
|
||||
:ok = BotState.set_pin_value(pin, value)
|
||||
end
|
||||
|
||||
def handle_software_version([version]) do
|
||||
:ok = Farmbot.BotState.set_firmware_version(version)
|
||||
:ok = BotState.set_firmware_version(version)
|
||||
end
|
||||
|
||||
def handle_end_stops(_) do
|
||||
|
@ -46,36 +46,36 @@ defmodule Farmbot.Core.FirmwareSideEffects do
|
|||
end
|
||||
|
||||
def handle_busy(busy) do
|
||||
:ok = Farmbot.BotState.set_firmware_busy(busy)
|
||||
:ok = BotState.set_firmware_busy(busy)
|
||||
end
|
||||
|
||||
def handle_emergency_lock() do
|
||||
_ = FirmwareEstopTimer.start_timer()
|
||||
:ok = Farmbot.BotState.set_firmware_locked()
|
||||
:ok = BotState.set_firmware_locked()
|
||||
end
|
||||
|
||||
def handle_emergency_unlock() do
|
||||
_ = FirmwareEstopTimer.cancel_timer()
|
||||
:ok = Farmbot.BotState.set_firmware_unlocked()
|
||||
:ok = BotState.set_firmware_unlocked()
|
||||
end
|
||||
|
||||
def handle_input_gcode(code) do
|
||||
should_log? = Farmbot.Asset.fbos_config().firmware_input_log
|
||||
should_log? && Farmbot.Logger.debug(3, inspect(code))
|
||||
should_log? = Asset.fbos_config().firmware_input_log
|
||||
should_log? && FarmbotCore.Logger.debug(3, inspect(code))
|
||||
end
|
||||
|
||||
def handle_output_gcode(code) do
|
||||
should_log? = Farmbot.Asset.fbos_config().firmware_output_log
|
||||
should_log? && Farmbot.Logger.debug(3, inspect(code))
|
||||
should_log? = Asset.fbos_config().firmware_output_log
|
||||
should_log? && FarmbotCore.Logger.debug(3, inspect(code))
|
||||
end
|
||||
|
||||
def handle_debug_message([message]) do
|
||||
should_log? = Farmbot.Asset.fbos_config().firmware_debug_log
|
||||
should_log? && Farmbot.Logger.debug(3, "Arduino debug message: " <> message)
|
||||
should_log? = Asset.fbos_config().firmware_debug_log
|
||||
should_log? && FarmbotCore.Logger.debug(3, "Arduino debug message: " <> message)
|
||||
end
|
||||
|
||||
def load_params do
|
||||
conf = Farmbot.Asset.firmware_config()
|
||||
conf = Asset.firmware_config()
|
||||
|
||||
Map.take(conf, [
|
||||
:param_e_stop_on_mov_err,
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.Core.FirmwareSupervisor do
|
||||
defmodule FarmbotCore.FirmwareSupervisor do
|
||||
use Supervisor
|
||||
alias Farmbot.Asset
|
||||
alias FarmbotCore.Asset.FbosConfig
|
||||
|
||||
def start_link(args) do
|
||||
Supervisor.start_link(__MODULE__, args, name: __MODULE__)
|
||||
|
@ -8,18 +8,18 @@ defmodule Farmbot.Core.FirmwareSupervisor do
|
|||
|
||||
def init([]) do
|
||||
children = [
|
||||
Farmbot.Core.FirmwareEstopTimer
|
||||
FarmbotCore.FirmwareEstopTimer
|
||||
]
|
||||
|
||||
Supervisor.init(children, strategy: :one_for_all)
|
||||
end
|
||||
|
||||
def firmware_children(%Asset.FbosConfig{} = fbos_config) do
|
||||
def firmware_children(%FbosConfig{} = fbos_config) do
|
||||
[
|
||||
{Farmbot.Firmware,
|
||||
{FarmbotFirmware,
|
||||
device: fbos_config.firmware_path,
|
||||
transport: Farmbot.Firmware.UARTTransport,
|
||||
side_effects: Farmbot.Core.FirmwareSideEffects}
|
||||
transport: FarmbotFirmware.UARTTransport,
|
||||
side_effects: FarmbotCore.FirmwareSideEffects}
|
||||
]
|
||||
end
|
||||
end
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.JSON do
|
||||
defmodule FarmbotCore.JSON do
|
||||
@moduledoc "Wraps a dependency for easy upgrade and no vendor lock."
|
||||
|
||||
@parser Application.get_env(:farmbot_core, __MODULE__)[:json_parser]
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.JSON.JasonParser do
|
||||
defmodule FarmbotCore.JSON.JasonParser do
|
||||
@moduledoc "Parser handler for Jason"
|
||||
@behaviour Farmbot.JSON.Parser
|
||||
@behaviour FarmbotCore.JSON.Parser
|
||||
|
||||
def decode(data, opts), do: Jason.decode(data, opts)
|
||||
def encode(data, opts), do: Jason.encode(data, opts)
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.JSON.Parser do
|
||||
defmodule FarmbotCore.JSON.Parser do
|
||||
@moduledoc """
|
||||
Callback module for wrapping a json dependency.
|
||||
"""
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Leds.Handler do
|
||||
defmodule FarmbotCore.Leds.Handler do
|
||||
@moduledoc """
|
||||
Led behaviour.
|
||||
"""
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Leds do
|
||||
defmodule FarmbotCore.Leds do
|
||||
@moduledoc "API for controling Farmbot LEDS."
|
||||
@led_handler Application.get_env(:farmbot_core, __MODULE__)[:gpio_handler]
|
||||
@led_handler || Mix.raise("You forgot a led handler!")
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
defmodule Farmbot.Leds.StubHandler do
|
||||
defmodule FarmbotCore.Leds.StubHandler do
|
||||
@moduledoc false
|
||||
@behaviour Farmbot.Leds.Handler
|
||||
@behaviour FarmbotCore.Leds.Handler
|
||||
|
||||
def red(status), do: do_debug(:red, status)
|
||||
def blue(status), do: do_debug(:blue, status)
|
||||
|
|
|
@ -1,7 +1,8 @@
|
|||
defmodule Farmbot.Log do
|
||||
defmodule FarmbotCore.Log do
|
||||
@moduledoc """
|
||||
This is _not_ the same as the API's log asset.
|
||||
"""
|
||||
alias FarmbotCore.{Log, Project}
|
||||
|
||||
defmodule LogLevelType do
|
||||
@moduledoc false
|
||||
|
@ -73,15 +74,15 @@ defmodule Farmbot.Log do
|
|||
|> validate_required(@required_fields)
|
||||
end
|
||||
|
||||
def new(%Farmbot.Log{} = merge) do
|
||||
def new(%Log{} = merge) do
|
||||
merge
|
||||
|> Map.put(:version, Version.parse!(Farmbot.Project.version()))
|
||||
|> Map.put(:commit, to_string(Farmbot.Project.commit()))
|
||||
|> Map.put(:target, to_string(Farmbot.Project.target()))
|
||||
|> Map.put(:env, to_string(Farmbot.Project.env()))
|
||||
|> Map.put(:version, Version.parse!(Project.version()))
|
||||
|> Map.put(:commit, to_string(Project.commit()))
|
||||
|> Map.put(:target, to_string(Project.target()))
|
||||
|> Map.put(:env, to_string(Project.env()))
|
||||
end
|
||||
|
||||
defimpl String.Chars, for: Farmbot.Log do
|
||||
defimpl String.Chars, for: Log do
|
||||
def to_string(log) do
|
||||
if log.meta[:color] && function_exported?(IO.ANSI, log.meta[:color], 0) do
|
||||
"#{apply(IO.ANSI, log.meta[:color], [])}#{log.message}#{color(:normal)}\n"
|
||||
|
|
|
@ -1,76 +1,77 @@
|
|||
defmodule Farmbot.Logger do
|
||||
defmodule FarmbotCore.Logger do
|
||||
@moduledoc """
|
||||
Log messages to Farmot endpoints.
|
||||
"""
|
||||
|
||||
alias Farmbot.Logger.Repo
|
||||
alias FarmbotCore.{Log, Logger.Repo}
|
||||
import Ecto.Query
|
||||
|
||||
@doc "Send a debug message to log endpoints"
|
||||
defmacro debug(verbosity, message, meta \\ []) do
|
||||
quote bind_quoted: [verbosity: verbosity, message: message, meta: meta] do
|
||||
Farmbot.Logger.dispatch_log(__ENV__, :debug, verbosity, message, meta)
|
||||
FarmbotCore.Logger.dispatch_log(__ENV__, :debug, verbosity, message, meta)
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Send an info message to log endpoints"
|
||||
defmacro info(verbosity, message, meta \\ []) do
|
||||
quote bind_quoted: [verbosity: verbosity, message: message, meta: meta] do
|
||||
Farmbot.Logger.dispatch_log(__ENV__, :info, verbosity, message, meta)
|
||||
FarmbotCore.Logger.dispatch_log(__ENV__, :info, verbosity, message, meta)
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Send an busy message to log endpoints"
|
||||
defmacro busy(verbosity, message, meta \\ []) do
|
||||
quote bind_quoted: [verbosity: verbosity, message: message, meta: meta] do
|
||||
Farmbot.Logger.dispatch_log(__ENV__, :busy, verbosity, message, meta)
|
||||
FarmbotCore.Logger.dispatch_log(__ENV__, :busy, verbosity, message, meta)
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Send an success message to log endpoints"
|
||||
defmacro success(verbosity, message, meta \\ []) do
|
||||
quote bind_quoted: [verbosity: verbosity, message: message, meta: meta] do
|
||||
Farmbot.Logger.dispatch_log(__ENV__, :success, verbosity, message, meta)
|
||||
FarmbotCore.Logger.dispatch_log(__ENV__, :success, verbosity, message, meta)
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Send an warn message to log endpoints"
|
||||
defmacro warn(verbosity, message, meta \\ []) do
|
||||
quote bind_quoted: [verbosity: verbosity, message: message, meta: meta] do
|
||||
Farmbot.Logger.dispatch_log(__ENV__, :warn, verbosity, message, meta)
|
||||
FarmbotCore.Logger.dispatch_log(__ENV__, :warn, verbosity, message, meta)
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Send an error message to log endpoints"
|
||||
defmacro error(verbosity, message, meta \\ []) do
|
||||
quote bind_quoted: [verbosity: verbosity, message: message, meta: meta] do
|
||||
Farmbot.Logger.dispatch_log(__ENV__, :error, verbosity, message, meta)
|
||||
FarmbotCore.Logger.dispatch_log(__ENV__, :error, verbosity, message, meta)
|
||||
end
|
||||
end
|
||||
|
||||
@doc false
|
||||
defmacro fun(verbosity, message, meta \\ []) do
|
||||
quote bind_quoted: [verbosity: verbosity, message: message, meta: meta] do
|
||||
Farmbot.Logger.dispatch_log(__ENV__, :fun, verbosity, message, meta)
|
||||
FarmbotCore.Logger.dispatch_log(__ENV__, :fun, verbosity, message, meta)
|
||||
end
|
||||
end
|
||||
|
||||
def insert_log!(%Farmbot.Log{} = log) do
|
||||
Farmbot.Log.changeset(log, %{})
|
||||
def insert_log!(%Log{} = log) do
|
||||
log
|
||||
|> Log.changeset(%{})
|
||||
|> Repo.insert!()
|
||||
end
|
||||
|
||||
@doc "Gets a log by it's id, deletes it."
|
||||
def handle_log(id) do
|
||||
case Repo.get(Farmbot.Log, id) do
|
||||
%Farmbot.Log{} = log -> Repo.delete!(log)
|
||||
case Repo.get(FarmbotCore.Log, id) do
|
||||
%Log{} = log -> Repo.delete!(log)
|
||||
nil -> nil
|
||||
end
|
||||
end
|
||||
|
||||
@doc "Gets all available logs and deletes them."
|
||||
def handle_all_logs do
|
||||
Repo.all(from(l in Farmbot.Log, order_by: l.inserted_at))
|
||||
Repo.all(from(l in FarmbotCore.Log, order_by: l.inserted_at))
|
||||
|> Enum.map(&Repo.delete!/1)
|
||||
end
|
||||
|
||||
|
@ -84,7 +85,7 @@ defmodule Farmbot.Logger do
|
|||
nil -> "no_function"
|
||||
end
|
||||
|
||||
struct(Farmbot.Log,
|
||||
struct(FarmbotCore.Log,
|
||||
level: level,
|
||||
verbosity: verbosity,
|
||||
message: message,
|
||||
|
@ -98,13 +99,13 @@ defmodule Farmbot.Logger do
|
|||
end
|
||||
|
||||
@doc false
|
||||
def dispatch_log(%Farmbot.Log{} = log) do
|
||||
def dispatch_log(%Log{} = log) do
|
||||
log
|
||||
|> insert_log!()
|
||||
|> elixir_log()
|
||||
end
|
||||
|
||||
defp elixir_log(%Farmbot.Log{} = log) do
|
||||
defp elixir_log(%Log{} = log) do
|
||||
# TODO Connor - fix time
|
||||
logger_meta = [
|
||||
application: :farmbot,
|
||||
|
@ -127,7 +128,7 @@ defmodule Farmbot.Logger do
|
|||
def should_log?(nil, _), do: false
|
||||
|
||||
def should_log?(module, verbosity) when verbosity <= 3 do
|
||||
List.first(Module.split(module)) == "Farmbot"
|
||||
List.first(Module.split(module)) =~ "Farmbot"
|
||||
end
|
||||
|
||||
def should_log?(_, _), do: false
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Logger.Repo do
|
||||
defmodule FarmbotCore.Logger.Repo do
|
||||
@moduledoc "Repo for storing logs."
|
||||
use Ecto.Repo,
|
||||
otp_app: :farmbot_core,
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Logger.Supervisor do
|
||||
defmodule FarmbotCore.Logger.Supervisor do
|
||||
@moduledoc false
|
||||
use Supervisor
|
||||
|
||||
|
@ -8,7 +8,7 @@ defmodule Farmbot.Logger.Supervisor do
|
|||
|
||||
def init([]) do
|
||||
children = [
|
||||
supervisor(Farmbot.Logger.Repo, [])
|
||||
supervisor(FarmbotCore.Logger.Repo, [])
|
||||
]
|
||||
|
||||
opts = [strategy: :one_for_all]
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Project do
|
||||
defmodule FarmbotCore.Project do
|
||||
@moduledoc "Farmbot project config"
|
||||
|
||||
@version Mix.Project.config[:version] || Mix.raise("Missing Project key version")
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.TimeUtils do
|
||||
defmodule FarmbotCore.TimeUtils do
|
||||
@moduledoc "Helper functions for working with time."
|
||||
|
||||
def format_time(%DateTime{} = dt) do
|
||||
|
@ -11,7 +11,7 @@ defmodule Farmbot.TimeUtils do
|
|||
# returns midnight of today
|
||||
@spec build_epoch(DateTime.t) :: DateTime.t
|
||||
def build_epoch(time) do
|
||||
tz = Farmbot.Asset.fbos_config().timezone
|
||||
tz = FarmbotCore.Asset.fbos_config().timezone
|
||||
n = Timex.Timezone.convert(time, tz)
|
||||
Timex.shift(n, hours: -n.hour, seconds: -n.second, minutes: -n.minute)
|
||||
end
|
||||
|
|
|
@ -57,7 +57,7 @@ defmodule FarmbotCore.MixProject do
|
|||
def application do
|
||||
[
|
||||
extra_applications: [:logger],
|
||||
mod: {Farmbot.Core, []}
|
||||
mod: {FarmbotCore, []}
|
||||
]
|
||||
end
|
||||
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateLocalMetasTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateLocalMetasTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateDevicesTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateDevicesTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateToolsTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateToolsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreatePeripheralsTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreatePeripheralsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateSensorsTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateSensorsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateSensorReadingsTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateSensorReadingsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateSequencesTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateSequencesTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateRegimensTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateRegimensTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreatePinBindingsTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreatePinBindingsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreatePointsTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreatePointsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Farmbot.Asset.Repo.Migrations.CreateFarmEventsTable do
|
||||
defmodule FarmbotCore.Asset.Repo.Migrations.CreateFarmEventsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Elixir.Farmbot.Asset.Repo.Migrations.CreateFirmwareConfigsTable do
|
||||
defmodule Elixir.FarmbotCore.Asset.Repo.Migrations.CreateFirmwareConfigsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Elixir.Farmbot.Asset.Repo.Migrations.CreateFbosConfigsTable do
|
||||
defmodule Elixir.FarmbotCore.Asset.Repo.Migrations.CreateFbosConfigsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Elixir.Farmbot.Asset.Repo.Migrations.CreateFarmwareInstallationsTable do
|
||||
defmodule Elixir.FarmbotCore.Asset.Repo.Migrations.CreateFarmwareInstallationsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
defmodule Elixir.Farmbot.Asset.Repo.Migrations.CreateFarmwareEnvsTable do
|
||||
defmodule Elixir.FarmbotCore.Asset.Repo.Migrations.CreateFarmwareEnvsTable do
|
||||
use Ecto.Migration
|
||||
|
||||
def change do
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue