diff --git a/farmbot_core/.iex.exs b/farmbot_core/.iex.exs index c38b889c..278d24d9 100644 --- a/farmbot_core/.iex.exs +++ b/farmbot_core/.iex.exs @@ -9,7 +9,7 @@ alias FarmbotCore.Asset.{ FirmwareConfig, PinBinding, Regimen, - PersistentRegimen, + RegimenInstance, Sequence } diff --git a/farmbot_core/config/config.exs b/farmbot_core/config/config.exs index 4a214f0c..4d426146 100644 --- a/farmbot_core/config/config.exs +++ b/farmbot_core/config/config.exs @@ -2,7 +2,7 @@ use Mix.Config config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmEvent, checkup_time_ms: 10_000 -config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen, +config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.RegimenInstance, checkup_time_ms: 10_000 config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.Private.Enigma, diff --git a/farmbot_core/config/test.exs b/farmbot_core/config/test.exs index 22132a67..f6ab1004 100644 --- a/farmbot_core/config/test.exs +++ b/farmbot_core/config/test.exs @@ -6,7 +6,7 @@ config :farmbot_core, FarmbotCore.AssetMonitor, checkup_time_ms: 500 config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmEvent, checkup_time_ms: 1000 -config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen, +config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.RegimenInstance, checkup_time_ms: 1000 config :farmbot_celery_script, FarmbotCeleryScript.SysCalls, diff --git a/farmbot_core/lib/farmbot_core/asset.ex b/farmbot_core/lib/farmbot_core/asset.ex index 2bb7a4b6..77c0484f 100644 --- a/farmbot_core/lib/farmbot_core/asset.ex +++ b/farmbot_core/lib/farmbot_core/asset.ex @@ -19,7 +19,7 @@ defmodule FarmbotCore.Asset do PinBinding, Point, Regimen, - PersistentRegimen, + RegimenInstance, Sequence } @@ -83,31 +83,31 @@ defmodule FarmbotCore.Asset do ## End FirmwareConfig - ## Begin PersistentRegimen + ## Begin RegimenInstance - def upsert_persistent_regimen!(%Regimen{} = regimen, %FarmEvent{} = farm_event, params \\ %{}) do + def upsert_regimen_instance!(%Regimen{} = regimen, %FarmEvent{} = farm_event, params \\ %{}) do q = - from(pr in PersistentRegimen, + from(pr in RegimenInstance, where: pr.regimen_id == ^regimen.local_id and pr.farm_event_id == ^farm_event.local_id ) - pr = Repo.one(q) || %PersistentRegimen{} + pr = Repo.one(q) || %RegimenInstance{} pr |> Repo.preload([:regimen, :farm_event]) - |> PersistentRegimen.changeset(params) + |> RegimenInstance.changeset(params) |> Ecto.Changeset.put_assoc(:regimen, regimen) |> Ecto.Changeset.put_assoc(:farm_event, farm_event) |> Repo.insert_or_update!() end - def update_persistent_regimen!(%PersistentRegimen{} = pr, params \\ %{}) do + def update_regimen_instance!(%RegimenInstance{} = pr, params \\ %{}) do pr - |> PersistentRegimen.changeset(params) + |> RegimenInstance.changeset(params) |> Repo.update!() end - ## End PersistentRegimen + ## End RegimenInstance ## Begin PinBinding diff --git a/farmbot_core/lib/farmbot_core/asset/persistent_regimen.ex b/farmbot_core/lib/farmbot_core/asset/regimen_instance.ex similarity index 91% rename from farmbot_core/lib/farmbot_core/asset/persistent_regimen.ex rename to farmbot_core/lib/farmbot_core/asset/regimen_instance.ex index 96f50194..995947d9 100644 --- a/farmbot_core/lib/farmbot_core/asset/persistent_regimen.ex +++ b/farmbot_core/lib/farmbot_core/asset/regimen_instance.ex @@ -1,10 +1,10 @@ -defmodule FarmbotCore.Asset.PersistentRegimen do +defmodule FarmbotCore.Asset.RegimenInstance 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 + schema "regimen_instances" do 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) @@ -16,8 +16,8 @@ defmodule FarmbotCore.Asset.PersistentRegimen do timestamps() end - def changeset(persistent_regimen, params \\ %{}) do - persistent_regimen + def changeset(regimen_instance, params \\ %{}) do + regimen_instance |> cast(params, [:started_at, :next, :next_sequence_id, :monitor]) |> put_epoch() |> cast_assoc(:regimen) diff --git a/farmbot_core/lib/farmbot_core/asset/supervisor.ex b/farmbot_core/lib/farmbot_core/asset/supervisor.ex index 32de112f..0e1d8143 100644 --- a/farmbot_core/lib/farmbot_core/asset/supervisor.ex +++ b/farmbot_core/lib/farmbot_core/asset/supervisor.ex @@ -12,7 +12,7 @@ defmodule FarmbotCore.Asset.Supervisor do FbosConfig, PinBinding, Peripheral, - PersistentRegimen + RegimenInstance } def start_link(args) do @@ -24,7 +24,7 @@ defmodule FarmbotCore.Asset.Supervisor do Repo, {AssetSupervisor, module: FbosConfig}, {AssetSupervisor, module: Device}, - {AssetSupervisor, module: PersistentRegimen}, + {AssetSupervisor, module: RegimenInstance}, {AssetSupervisor, module: FarmEvent}, {AssetSupervisor, module: PinBinding}, {AssetSupervisor, module: Peripheral}, diff --git a/farmbot_core/lib/farmbot_core/asset_monitor.ex b/farmbot_core/lib/farmbot_core/asset_monitor.ex index 5aa2d493..4250f257 100644 --- a/farmbot_core/lib/farmbot_core/asset_monitor.ex +++ b/farmbot_core/lib/farmbot_core/asset_monitor.ex @@ -15,7 +15,7 @@ defmodule FarmbotCore.AssetMonitor do FarmwareInstallation, FarmwareEnv, Peripheral, - PersistentRegimen, + RegimenInstance, PinBinding, } @@ -119,7 +119,7 @@ defmodule FarmbotCore.AssetMonitor do FbosConfig, FarmEvent, Peripheral, - PersistentRegimen, + RegimenInstance, PinBinding, FarmwareInstallation, FarmwareEnv diff --git a/farmbot_core/lib/farmbot_core/asset_workers/farm_event_worker.ex b/farmbot_core/lib/farmbot_core/asset_workers/farm_event_worker.ex index 6c78d7d7..1fc1ef07 100644 --- a/farmbot_core/lib/farmbot_core/asset_workers/farm_event_worker.ex +++ b/farmbot_core/lib/farmbot_core/asset_workers/farm_event_worker.ex @@ -177,6 +177,6 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.FarmEvent do @doc false def handle_regimen(exe, event, params) do - Asset.upsert_persistent_regimen!(exe, event, params) + Asset.upsert_regimen_instance!(exe, event, params) end end diff --git a/farmbot_core/lib/farmbot_core/asset_workers/persistent_regimen_worker.ex b/farmbot_core/lib/farmbot_core/asset_workers/regimen_instance_worker.ex similarity index 74% rename from farmbot_core/lib/farmbot_core/asset_workers/persistent_regimen_worker.ex rename to farmbot_core/lib/farmbot_core/asset_workers/regimen_instance_worker.ex index 1732b2d2..7ab41112 100644 --- a/farmbot_core/lib/farmbot_core/asset_workers/persistent_regimen_worker.ex +++ b/farmbot_core/lib/farmbot_core/asset_workers/regimen_instance_worker.ex @@ -1,4 +1,4 @@ -defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PersistentRegimen do +defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.RegimenInstance do @moduledoc """ An instance of a running Regimen. Asset.Regimen is the blueprint by which a Regimen "instance" is created. @@ -9,8 +9,9 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PersistentRegimen do require FarmbotCore.Logger alias FarmbotCore.Asset - alias FarmbotCore.Asset.{PersistentRegimen, FarmEvent, Regimen} + alias FarmbotCore.Asset.{RegimenInstance, FarmEvent, Regimen} alias FarmbotCeleryScript.{Scheduler, AST, Compiler} + alias FarmbotCeleryScript.Scheduler @checkup_time_ms Application.get_env(:farmbot_core, __MODULE__)[:checkup_time_ms] @checkup_time_ms || @@ -18,33 +19,33 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PersistentRegimen do config :farmbot_core, #{__MODULE__}, checkup_time_ms: 10_000 """) - def preload(%PersistentRegimen{}), do: [:farm_event, :regimen] + def preload(%RegimenInstance{}), do: [:farm_event, :regimen] - def start_link(persistent_regimen, args) do - GenServer.start_link(__MODULE__, [persistent_regimen, args]) + def start_link(regimen_instance, args) do + GenServer.start_link(__MODULE__, [regimen_instance, args]) end - def init([persistent_regimen, args]) do + def init([regimen_instance, args]) do apply_sequence = Keyword.get(args, :apply_sequence, &apply_sequence/2) unless is_function(apply_sequence, 2) do - raise "PersistentRegimen Sequence handler should be a 2 arity function" + raise "RegimenInstance Sequence handler should be a 2 arity function" end Process.put(:apply_sequence, apply_sequence) - with %Regimen{} <- persistent_regimen.regimen, - %FarmEvent{} <- persistent_regimen.farm_event do - {:ok, filter_items(persistent_regimen), 0} + with %Regimen{} <- regimen_instance.regimen, + %FarmEvent{} <- regimen_instance.farm_event do + {:ok, filter_items(regimen_instance), 0} else - _ -> {:stop, "Persistent Regimen not preloaded."} + _ -> {:stop, "Regimen instance not preloaded."} end end - def handle_info(:timeout, %PersistentRegimen{next: nil} = pr) do - persistent_regimen = filter_items(pr) - calculate_next(persistent_regimen, 0) + def handle_info(:timeout, %RegimenInstance{next: nil} = pr) do + regimen_instance = filter_items(pr) + calculate_next(regimen_instance, 0) end - def handle_info(:timeout, %PersistentRegimen{} = pr) do + def handle_info(:timeout, %RegimenInstance{} = pr) do # Check if pr.next is around 2 minutes in the past # positive if the first date/time comes after the second. comp = Timex.diff(DateTime.utc_now(), pr.next, :minutes) @@ -77,7 +78,7 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PersistentRegimen do params = %{next: next_dt, next_sequence_id: next.sequence_id} # TODO(Connor) - This causes the active GenServer to be # Restarted due to the `AssetMonitor` - pr = Asset.update_persistent_regimen!(pr, params) + pr = Asset.update_regimen_instance!(pr, params) pr = %{ pr @@ -92,7 +93,7 @@ defimpl FarmbotCore.AssetWorker, for: FarmbotCore.Asset.PersistentRegimen do {:noreply, pr, :hibernate} end - defp filter_items(%PersistentRegimen{regimen: %Regimen{} = reg} = pr) do + defp filter_items(%RegimenInstance{regimen: %Regimen{} = reg} = pr) do items = reg.regimen_items |> Enum.sort(&(&1.time_offset <= &2.time_offset)) diff --git a/farmbot_core/priv/asset/migrations/20181022002450_create_persistent_regimens_table.exs b/farmbot_core/priv/asset/migrations/20181022002450_create_persistent_regimens_table.exs index ec75358c..3994b57d 100644 --- a/farmbot_core/priv/asset/migrations/20181022002450_create_persistent_regimens_table.exs +++ b/farmbot_core/priv/asset/migrations/20181022002450_create_persistent_regimens_table.exs @@ -1,4 +1,4 @@ -defmodule FarmbotCore.Asset.Repo.Migrations.CreatePersistentRegimensTable do +defmodule FarmbotCore.Asset.Repo.Migrations.CreateRegimenInstancesTable do use Ecto.Migration def change do diff --git a/farmbot_core/priv/asset/migrations/20190326211733_rename_persistent_regimens_to_regimen_instances.exs b/farmbot_core/priv/asset/migrations/20190326211733_rename_persistent_regimens_to_regimen_instances.exs new file mode 100644 index 00000000..ec4641a0 --- /dev/null +++ b/farmbot_core/priv/asset/migrations/20190326211733_rename_persistent_regimens_to_regimen_instances.exs @@ -0,0 +1,7 @@ +defmodule FarmbotCore.Asset.Repo.Migrations.RenamePersistentRegimensToRegimenInstances do + use Ecto.Migration + + def change do + rename(table(:persistent_regimens), to: table(:regimen_instances)) + end +end diff --git a/farmbot_core/test/asset_monitor_test.exs b/farmbot_core/test/asset_monitor_test.exs index 89b779eb..e6a8ed20 100644 --- a/farmbot_core/test/asset_monitor_test.exs +++ b/farmbot_core/test/asset_monitor_test.exs @@ -3,8 +3,8 @@ defmodule FarmbotCore.AssetMonitorTest do alias FarmbotCore.{Asset.Repo, AssetMonitor, AssetSupervisor} import Farmbot.TestSupport.AssetFixtures - describe "persistent regimens" do - test "adding a persistent regimen starts a process" do + describe "regimen instances" do + test "adding a regimen instance starts a process" do farm_event_params = %{ start_time: DateTime.utc_now(), end_time: DateTime.utc_now(), @@ -12,7 +12,7 @@ defmodule FarmbotCore.AssetMonitorTest do time_unit: "never" } - pr = persistent_regimen(%{}, farm_event_params, %{monitor: true}) + pr = regimen_instance(%{}, farm_event_params, %{monitor: true}) AssetMonitor.force_checkup() diff --git a/farmbot_core/test/asset_test.exs b/farmbot_core/test/asset_test.exs index 06e5d59d..e70ee42d 100644 --- a/farmbot_core/test/asset_test.exs +++ b/farmbot_core/test/asset_test.exs @@ -1,25 +1,25 @@ defmodule FarmbotCore.AssetTest do use ExUnit.Case, async: true - alias FarmbotCore.Asset.{Repo, Regimen, PersistentRegimen} + alias FarmbotCore.Asset.{Repo, Regimen, RegimenInstance} alias FarmbotCore.Asset import Farmbot.TestSupport.AssetFixtures - describe "persistent regimens" do - test "creates a persistent regimen" do + describe "regimen instances" do + test "creates a regimen instance" do seq = sequence() reg = regimen(%{regimen_items: [%{time_offset: 100, sequence_id: seq.id}]}) event = regimen_event(reg) - assert %PersistentRegimen{} = Asset.upsert_persistent_regimen!(reg, event) + assert %RegimenInstance{} = Asset.upsert_regimen_instance!(reg, event) end test "updates a persisten regimen" do seq = sequence() reg = regimen(%{name: "old", regimen_items: [%{time_offset: 100, sequence_id: seq.id}]}) event = regimen_event(reg) - pr = Asset.upsert_persistent_regimen!(reg, event) + pr = Asset.upsert_regimen_instance!(reg, event) assert pr.regimen.name == "old" reg = Regimen.changeset(reg, %{name: "new"}) |> Repo.update!() - pr = Asset.upsert_persistent_regimen!(reg, event) + pr = Asset.upsert_regimen_instance!(reg, event) assert pr.regimen.name == "new" end end diff --git a/farmbot_core/test/asset_workers/farm_event_worker_test.exs b/farmbot_core/test/asset_workers/farm_event_worker_test.exs index f67c6e01..b0035676 100644 --- a/farmbot_core/test/asset_workers/farm_event_worker_test.exs +++ b/farmbot_core/test/asset_workers/farm_event_worker_test.exs @@ -4,7 +4,7 @@ defmodule FarmbotCore.FarmEventWorkerTest do import Farmbot.TestSupport.AssetFixtures - # Regimen tests are in the PersistentRegimeWorker test + # Regimen tests are in the RegimenInstanceWorker test describe "sequences" do test "doesn't execute a sequence more than 2 mintues late" do diff --git a/farmbot_core/test/asset_workers/persistent_regimen_worker_test.exs b/farmbot_core/test/asset_workers/regimen_instance_worker_test.exs similarity index 88% rename from farmbot_core/test/asset_workers/persistent_regimen_worker_test.exs rename to farmbot_core/test/asset_workers/regimen_instance_worker_test.exs index 3f0c090e..2633c43f 100644 --- a/farmbot_core/test/asset_workers/persistent_regimen_worker_test.exs +++ b/farmbot_core/test/asset_workers/regimen_instance_worker_test.exs @@ -1,9 +1,9 @@ -defmodule FarmbotCore.PersistentRegimenWorkerTest do +defmodule FarmbotCore.RegimenInstanceWorkerTest do use ExUnit.Case, async: false alias FarmbotCeleryScript.Scheduler - alias FarmbotCore.Asset.PersistentRegimen + alias FarmbotCore.Asset.RegimenInstance import Farmbot.TestSupport.AssetFixtures @@ -13,7 +13,7 @@ defmodule FarmbotCore.PersistentRegimenWorkerTest do now = DateTime.utc_now() start_time = Timex.shift(now, minutes: -20) end_time = Timex.shift(now, minutes: 10) - {:ok, epoch} = PersistentRegimen.build_epoch(now) + {:ok, epoch} = RegimenInstance.build_epoch(now) offset = Timex.diff(now, epoch, :milliseconds) + 500 seq = sequence() @@ -26,7 +26,7 @@ defmodule FarmbotCore.PersistentRegimenWorkerTest do time_unit: "never" } - pr = persistent_regimen(regimen_params, farm_event_params) + pr = regimen_instance(regimen_params, farm_event_params) test_pid = self() @@ -36,7 +36,7 @@ defmodule FarmbotCore.PersistentRegimenWorkerTest do end ] - {:ok, _} = FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen.start_link(pr, args) + {:ok, _} = FarmbotCore.AssetWorker.FarmbotCore.Asset.RegimenInstance.start_link(pr, args) assert_receive :executed end @@ -44,7 +44,7 @@ defmodule FarmbotCore.PersistentRegimenWorkerTest do now = DateTime.utc_now() start_time = Timex.shift(now, minutes: -20) end_time = Timex.shift(now, minutes: 10) - {:ok, epoch} = PersistentRegimen.build_epoch(now) + {:ok, epoch} = RegimenInstance.build_epoch(now) offset = Timex.diff(now, epoch, :milliseconds) + 500 # Asset instances @@ -161,7 +161,7 @@ defmodule FarmbotCore.PersistentRegimenWorkerTest do # process instances # inject syscalls # inject celery_script scheduler - # inject apply_sequence to PersistentRegimen + # inject apply_sequence to RegimenInstance {:ok, shim} = TestSysCalls.checkout() that = self() @@ -181,9 +181,9 @@ defmodule FarmbotCore.PersistentRegimenWorkerTest do end) {:ok, sch} = Scheduler.start_link([], []) - pr = persistent_regimen(regimen_params, farm_event_params) + pr = regimen_instance(regimen_params, farm_event_params) - {:ok, _} = FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen.start_link(pr, []) + {:ok, _} = FarmbotCore.AssetWorker.FarmbotCore.Asset.RegimenInstance.start_link(pr, []) expected_x = 9000 expected_y = 9000 diff --git a/farmbot_ext/config/farmbot_core.exs b/farmbot_ext/config/farmbot_core.exs index 18e887e2..61f2766e 100644 --- a/farmbot_ext/config/farmbot_core.exs +++ b/farmbot_ext/config/farmbot_core.exs @@ -1,7 +1,7 @@ use Mix.Config config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmEvent, checkup_time_ms: 10_000 -config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen, +config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.RegimenInstance, checkup_time_ms: 10_000 config :farmbot_core, Elixir.FarmbotCore.AssetWorker.FarmbotCore.Asset.PinBinding, diff --git a/farmbot_os/config/config.exs b/farmbot_os/config/config.exs index 9116a869..7b790a53 100644 --- a/farmbot_os/config/config.exs +++ b/farmbot_os/config/config.exs @@ -2,7 +2,7 @@ use Mix.Config config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.FarmEvent, checkup_time_ms: 10_000 -config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.PersistentRegimen, +config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.RegimenInstance, checkup_time_ms: 10_000 config :farmbot_core, FarmbotCore.AssetWorker.FarmbotCore.Asset.Private.Enigma, diff --git a/test/support/asset_fixtures.ex b/test/support/asset_fixtures.ex index 6a17bd37..9987019b 100644 --- a/test/support/asset_fixtures.ex +++ b/test/support/asset_fixtures.ex @@ -2,11 +2,11 @@ defmodule Farmbot.TestSupport.AssetFixtures do alias FarmbotCore.Asset alias FarmbotCore.Asset.{Repo, FarmEvent, FbosConfig, Regimen, Sequence, Private} - def persistent_regimen(regimen_params, farm_event_params, params \\ %{}) do + def regimen_instance(regimen_params, farm_event_params, params \\ %{}) do regimen = regimen(regimen_params) farm_event = regimen_event(regimen, farm_event_params) params = Map.merge(%{id: :rand.uniform(10000), monitor: false}, params) - Asset.upsert_persistent_regimen!(regimen, farm_event, params) + Asset.upsert_regimen_instance!(regimen, farm_event, params) end def fbos_config(params \\ %{}) do diff --git a/test/support/test_support.ex b/test/support/test_support.ex index 58fa6e0c..5f6e895d 100644 --- a/test/support/test_support.ex +++ b/test/support/test_support.ex @@ -1,12 +1,12 @@ defmodule Farmbot.TestSupport do - alias FarmbotCore.AssetWorker.FarmbotCore.Asset.{FarmEvent, PersistentRegimen} + alias FarmbotCore.AssetWorker.FarmbotCore.Asset.{FarmEvent, RegimenInstance} def farm_event_timeout do Application.get_env(:farmbot_core, FarmEvent)[:checkup_time_ms] end - def persistent_regimen_timeout do - Application.get_env(:farmbot_core, PersistentRegimen)[:checkup_time_ms] + def regimen_instance_timeout do + Application.get_env(:farmbot_core, RegimenInstance)[:checkup_time_ms] end def asset_monitor_timeout do