farmbot_os/farmbot_core/lib/farmbot_core/bot_state_ng/informational_settings.ex

110 lines
3.7 KiB
Elixir

defmodule FarmbotCore.BotStateNG.InformationalSettings do
@moduledoc false
alias FarmbotCore.BotStateNG.InformationalSettings
use Ecto.Schema
import Ecto.Changeset
alias FarmbotCore.Project
@primary_key false
embedded_schema do
field(:target, :string, default: to_string(Project.target()))
field(:env, :string, default: to_string(Project.env()))
field(:firmware_commit, :string, default: Project.arduino_commit())
field(:controller_version, :string, default: Project.version())
field(:controller_uuid, :string)
field(:controller_commit, :string, default: Project.commit())
field(:firmware_version, :string)
field(:firmware_configured, :boolean, default: false)
field(:node_name, :string)
field(:private_ip, :string)
field(:soc_temp, :integer)
field(:throttled, :string)
field(:wifi_level, :integer)
field(:wifi_level_percent, :integer)
field(:uptime, :integer)
field(:memory_usage, :integer)
field(:disk_usage, :integer)
field(:scheduler_usage, :integer)
field(:sync_status, :string, default: "sync_now")
field(:locked, :boolean, default: false)
field(:last_status, :string)
field(:cache_bust, :integer)
field(:busy, :boolean)
field(:idle, :boolean)
field(:update_available, :boolean, default: false)
end
def new do
%InformationalSettings{}
|> changeset(%{})
|> apply_changes()
end
def view(informational_settings) do
%{
target: informational_settings.target,
env: informational_settings.env,
controller_version: informational_settings.controller_version,
controller_uuid: informational_settings.controller_uuid,
controller_commit: informational_settings.controller_commit,
# this field is required for the frontend. Maybe remove in the future.
commit: informational_settings.controller_commit,
firmware_commit: informational_settings.firmware_commit,
firmware_version: informational_settings.firmware_version,
firmware_configured: informational_settings.firmware_configured,
node_name: informational_settings.node_name,
private_ip: informational_settings.private_ip,
soc_temp: informational_settings.soc_temp,
throttled: informational_settings.throttled,
wifi_level: informational_settings.wifi_level,
wifi_level_percent: informational_settings.wifi_level_percent,
uptime: informational_settings.uptime,
memory_usage: informational_settings.memory_usage,
disk_usage: informational_settings.disk_usage,
scheduler_usage: informational_settings.scheduler_usage,
# this field is required for the frontend. Maybe remove in the future.
cpu_usage: informational_settings.scheduler_usage,
sync_status: informational_settings.sync_status,
locked: informational_settings.locked,
last_status: informational_settings.last_status,
cache_bust: informational_settings.cache_bust,
busy: informational_settings.busy,
idle: informational_settings.idle,
update_available: informational_settings.update_available
}
end
def changeset(informational_settings, params \\ %{}) do
informational_settings
|> cast(params, [
:target,
:env,
:controller_version,
:controller_uuid,
:controller_commit,
:firmware_commit,
:firmware_version,
:firmware_configured,
:node_name,
:private_ip,
:soc_temp,
:throttled,
:wifi_level,
:wifi_level_percent,
:uptime,
:memory_usage,
:disk_usage,
:scheduler_usage,
:sync_status,
:locked,
:last_status,
:cache_bust,
:busy,
:idle,
:update_available
])
end
end