Rename FarmbotCore Namespace

pull/974/head
Connor Rigby 2019-03-05 10:09:15 -08:00
parent 22ceb7a01a
commit f1dd9009ea
No known key found for this signature in database
GPG Key ID: 29A88B24B70456E0
158 changed files with 532 additions and 495 deletions

View File

@ -1,6 +1,6 @@
alias Farmbot.{Asset, Asset.Repo}
alias FarmbotCore.{Asset, Asset.Repo}
alias Farmbot.Asset.{
alias FarmbotCore.Asset.{
Device,
FarmwareEnv,
FarmwareInstallation,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
defmodule Farmbot.Asset do
alias Farmbot.Asset.{
defmodule FarmbotCore.Asset do
alias FarmbotCore.Asset.{
Repo,
Device,
DeviceCert,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -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: []

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,5 +1,5 @@
defmodule Farmbot.BotStateNG do
alias Farmbot.{
defmodule FarmbotCore.BotStateNG do
alias FarmbotCore.{
BotStateNG,
BotStateNG.McuParams,
BotStateNG.LocationData,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Config.BoolValue do
defmodule FarmbotCore.Config.BoolValue do
@moduledoc false
use Ecto.Schema

View File

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

View File

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

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Config.FloatValue do
defmodule FarmbotCore.Config.FloatValue do
@moduledoc false
use Ecto.Schema

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Config.Group do
defmodule FarmbotCore.Config.Group do
@moduledoc false
use Ecto.Schema

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Config.StringValue do
defmodule FarmbotCore.Config.StringValue do
@moduledoc false
use Ecto.Schema

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
defmodule Farmbot.FarmwareRuntime.PipeWorker do
defmodule FarmbotCore.FarmwareRuntime.PipeWorker do
@moduledoc """
Proxy for Pipe IO operations.
"""

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,4 @@
defmodule Farmbot.JSON.Parser do
defmodule FarmbotCore.JSON.Parser do
@moduledoc """
Callback module for wrapping a json dependency.
"""

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Leds.Handler do
defmodule FarmbotCore.Leds.Handler do
@moduledoc """
Led behaviour.
"""

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -57,7 +57,7 @@ defmodule FarmbotCore.MixProject do
def application do
[
extra_applications: [:logger],
mod: {Farmbot.Core, []}
mod: {FarmbotCore, []}
]
end

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateLocalMetasTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateLocalMetasTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateDevicesTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateDevicesTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateToolsTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateToolsTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreatePeripheralsTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreatePeripheralsTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateSensorsTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateSensorsTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateSensorReadingsTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateSensorReadingsTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateSequencesTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateSequencesTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateRegimensTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateRegimensTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreatePinBindingsTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreatePinBindingsTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreatePointsTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreatePointsTable do
use Ecto.Migration
def change do

View File

@ -1,4 +1,4 @@
defmodule Farmbot.Asset.Repo.Migrations.CreateFarmEventsTable do
defmodule FarmbotCore.Asset.Repo.Migrations.CreateFarmEventsTable do
use Ecto.Migration
def change do

View File

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

View File

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

View File

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

View File

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