defmodule Mix.Tasks.Kraken.Services do
use Mix.Task
alias Kraken.Client
@shortdoc "Manipulates Kraken services."
@moduledoc """
Manipulates Kraken services.
"""
def run(args) do
{:ok, _pid} = Client.start_finch()
case args do
[] ->
"/services"
|> Client.get()
|> print()
["define", payload] ->
"/services/define"
|> Client.post(payload)
|> print()
["status", name] ->
"/services/status/#{name}"
|> Client.get()
|> print()
["state", name] ->
"/services/state/#{name}"
|> Client.get()
|> print()
["definition", name] ->
"/services/definition/#{name}"
|> Client.get()
|> print()
["start", name] ->
"/services/start/#{name}"
|> Client.post("")
|> print()
["start", name, payload] ->
"/services/start/#{name}"
|> Client.post(payload)
|> print()
["stop", name] ->
"/services/stop/#{name}"
|> Client.post("")
|> print()
["stop", name, payload] ->
"/services/stop/#{name}"
|> Client.post(payload)
|> print()
["delete", name] ->
"/services/delete/#{name}"
|> Client.post("")
|> print()
["call", service, function, payload] ->
"/services/call/#{service}/#{function}"
|> Client.post(payload)
|> print()
args ->
IO.puts("Unknown command: #{Enum.join(args, " ")}")
end
end
defp print(json) do
json
|> Jason.Formatter.pretty_print()
|> IO.puts()
end
end