Packages

IntegrateDB is a database sharing system. It provides integration primitives and data ownership and migration controls. Use it to integrate applications directly through a Postgres database.

Current section

Files

Jump to
integratedb lib mix tasks insert_foos.ex
Raw

lib/mix/tasks/insert_foos.ex

defmodule Mix.Tasks.InsertFoos do
use Mix.Task
alias Integrate.Foo
alias Integrate.Repo
@default_delay_secs 5
@shortdoc "Insert a foo every `delay` seconds."
def run(args) do
Logger.configure(level: :warning)
[:postgrex, :ecto] |> Enum.each(&Application.ensure_all_started/1)
{:ok, _} = Repo.start_link()
delay_secs =
case args do
[arg] -> String.to_integer(arg)
_alt -> @default_delay_secs
end
IO.puts("Looping every #{delay_secs} seconds.")
loop({1, delay_secs * 1000})
end
defp loop({counter, delay_ms}) do
insert_foo(counter)
Process.sleep(delay_ms)
loop({counter + 1, delay_ms})
end
defp insert_foo(counter) do
name = "#{counter}-#{random_string(6)}"
foo =
%Foo{}
|> Foo.changeset(%{name: name})
|> Repo.insert!()
IO.puts("- inserted foo id:#{foo.id} name:#{foo.name}")
end
defp random_string(len) do
(len / 2)
|> Kernel.trunc()
|> :crypto.strong_rand_bytes()
|> Base.encode16(case: :lower)
end
end