From e1ef16f976e2afcb1d5a86e5b2fc5c93e4543e92 Mon Sep 17 00:00:00 2001 From: Zack Siri Date: Wed, 19 Jun 2024 20:14:12 +0700 Subject: [PATCH] Setup data structures for tracking tests --- lib/polar/machines.ex | 5 ++++ lib/polar/machines/assessment.ex | 27 +++++++++++++++++++ lib/polar/machines/check.ex | 18 +++++++++++++ lib/polar/machines/cluster.ex | 13 ++++++--- lib/polar/machines/cluster/manager.ex | 10 +++++++ .../20240619130455_create_checks.exs | 14 ++++++++++ .../20240619130844_create_assessments.exs | 21 +++++++++++++++ 7 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 lib/polar/machines/assessment.ex create mode 100644 lib/polar/machines/check.ex create mode 100644 priv/repo/migrations/20240619130455_create_checks.exs create mode 100644 priv/repo/migrations/20240619130844_create_assessments.exs diff --git a/lib/polar/machines.ex b/lib/polar/machines.ex index bd5a857..67de716 100644 --- a/lib/polar/machines.ex +++ b/lib/polar/machines.ex @@ -1,2 +1,7 @@ defmodule Polar.Machines do + alias __MODULE__.Manager + + defdelegate create_cluster(params), + to: Manager, + as: :create end diff --git a/lib/polar/machines/assessment.ex b/lib/polar/machines/assessment.ex new file mode 100644 index 0000000..69cef93 --- /dev/null +++ b/lib/polar/machines/assessment.ex @@ -0,0 +1,27 @@ +defmodule Polar.Machines.Assessment do + use Ecto.Schema + import Ecto.Changeset + + alias Polar.Streams + alias Polar.Machines.Check + alias Polar.Machines.Cluster + s + + schema "assessments" do + field :current_state, :string, default: "created" + + belongs_to :check, Check + belongs_to :cluster, Cluster + + belongs_to :version, Streams.Version + + timestamps(type: :utc_datetime) + end + + @doc false + def changeset(assessment, attrs) do + assessment + |> cast(attrs, [:current_state]) + |> validate_required([:current_state]) + end +end diff --git a/lib/polar/machines/check.ex b/lib/polar/machines/check.ex new file mode 100644 index 0000000..15e2c26 --- /dev/null +++ b/lib/polar/machines/check.ex @@ -0,0 +1,18 @@ +defmodule Polar.Machines.Check do + use Ecto.Schema + import Ecto.Changeset + + schema "checks" do + field :slug, :string + field :description, :string + + timestamps(type: :utc_datetime_usec) + end + + @doc false + def changeset(check, attrs) do + check + |> cast(attrs, [:slug, :description]) + |> validate_required([:slug, :description]) + end +end diff --git a/lib/polar/machines/cluster.ex b/lib/polar/machines/cluster.ex index ec4b803..f125c99 100644 --- a/lib/polar/machines/cluster.ex +++ b/lib/polar/machines/cluster.ex @@ -2,12 +2,19 @@ defmodule Polar.Machines.Cluster do use Ecto.Schema import Ecto.Changeset + @valid_attrs ~w( + name + type + arch + credential + )a + schema "clusters" do field :name, :string field :current_state, :string, default: "created" field :type, :string - field :architecture, :string + field :arch, :string field :credential, Polar.Encrypted.Map @@ -17,7 +24,7 @@ defmodule Polar.Machines.Cluster do @doc false def changeset(cluster, attrs) do cluster - |> cast(attrs, [:name, :type, :architecture, :current_state, :credential]) - |> validate_required([:name, :type, :architecture, :current_state, :credential]) + |> cast(attrs, @valid_attrs) + |> validate_required(@valid_attrs) end end diff --git a/lib/polar/machines/cluster/manager.ex b/lib/polar/machines/cluster/manager.ex index e69de29..a9cc3d1 100644 --- a/lib/polar/machines/cluster/manager.ex +++ b/lib/polar/machines/cluster/manager.ex @@ -0,0 +1,10 @@ +defp Polar.Machines.Cluster do + alias Polar.Repo + alias Polar.Machines.Cluster + + def create(params) do + %Cluster{} + |> Cluster.changeset(params) + |> Repo.insert() + end +end diff --git a/priv/repo/migrations/20240619130455_create_checks.exs b/priv/repo/migrations/20240619130455_create_checks.exs new file mode 100644 index 0000000..c7c587d --- /dev/null +++ b/priv/repo/migrations/20240619130455_create_checks.exs @@ -0,0 +1,14 @@ +defmodule Polar.Repo.Migrations.CreateChecks do + use Ecto.Migration + + def change do + create table(:checks) do + add :slug, :citext, null: false + add :description, :citext, null: false + + timestamps(type: :utc_datetime_usec) + end + + create index(:checks, [:slug], unique: true) + end +end diff --git a/priv/repo/migrations/20240619130844_create_assessments.exs b/priv/repo/migrations/20240619130844_create_assessments.exs new file mode 100644 index 0000000..47b47dd --- /dev/null +++ b/priv/repo/migrations/20240619130844_create_assessments.exs @@ -0,0 +1,21 @@ +defmodule Polar.Repo.Migrations.CreateAssessments do + use Ecto.Migration + + def change do + create table(:assessments) do + add :current_state, :citext, default: "created", null: false + + add :check_id, references(:checks, on_delete: :restrict), null: false + add :version_id, references(:versions, on_delete: :restrict), null: false + add :cluster_id, references(:clusters, on_delete: :restrict), null: false + + timestamps(type: :utc_datetime_utc) + end + + create index(:assessments, [:check_id]) + create index(:assessments, [:version_id]) + create index(:assessments, [:cluster_id]) + + create index(:assessments, [:check_id, :version_id], unique: true) + end +end