Current section
Files
Jump to
Current section
Files
lib/mix/tasks/server_logger.gen.migration.ex
defmodule Mix.Tasks.ServerLogger.Gen.Migration do
@shortdoc "Generates a migration for the ServerLogger tables"
@moduledoc """
Generates a migration file that creates the server_logs partitioned table.
$ mix server_logger.gen.migration
The generated migration delegates to `ServerLogger.Migration.up/0` and
`ServerLogger.Migration.down/0`.
## Options
* `--repo` - the repo to generate the migration for (defaults to the app's repo)
"""
use Mix.Task
import Mix.Ecto
import Mix.EctoSQL
import Mix.Generator
@impl true
def run(args) do
[repo | _] = parse_repo(args)
ensure_repo(repo, args)
adapter = repo.__adapter__()
unless adapter == Ecto.Adapters.Postgres do
Mix.raise(
"ServerLogger only supports PostgreSQL. " <>
"Expected Ecto.Adapters.Postgres, got: #{inspect(adapter)}"
)
end
path = Path.join(source_repo_priv(repo), "migrations")
file = Path.join(path, "#{timestamp()}_create_server_logs.exs")
create_directory(path)
create_file(file, migration_template(repo: repo))
Mix.shell().info("""
Migration generated!
Run the migration with:
$ mix ecto.migrate
""")
end
defp timestamp do
{{y, m, d}, {hh, mm, ss}} = :calendar.universal_time()
"#{y}#{pad(m)}#{pad(d)}#{pad(hh)}#{pad(mm)}#{pad(ss)}"
end
defp pad(i) when i < 10, do: "0#{i}"
defp pad(i), do: "#{i}"
embed_template(:migration, """
defmodule <%= inspect @repo %>.Migrations.CreateServerLogs do
use Ecto.Migration
def up, do: ServerLogger.Migration.up()
def down, do: ServerLogger.Migration.down()
end
""")
end