+ def init(_), do: {:ok, @init_state}
+
+ def rebooted? do
+ GenServer.call(__MODULE__, :rebooted?)
+ end
+
+ def rebooted do
+ GenServer.cast(__MODULE__, :rebooted)
+ end
+
+ def need_reboot? do
+ GenServer.call(__MODULE__, :need_reboot?)
+ end
+
+ def need_reboot do
+ GenServer.cast(__MODULE__, :need_reboot)
+ end
+
+ def refresh do
+ GenServer.cast(__MODULE__, :refresh)
+ end
+
+ def restart(env, delay) do
+ GenServer.cast(__MODULE__, {:restart, env, delay})
+ end
+
+ def restart_after_boot(env) do
+ GenServer.cast(__MODULE__, {:after_boot, env})
+ end
+
+ def handle_call(:rebooted?, _from, state) do
+ {:reply, state[:rebooted], state}
+ end
+
+ def handle_call(:need_reboot?, _from, state) do
+ {:reply, state[:need_reboot], state}
+ end
+
+ def handle_cast(:rebooted, state) do
+ {:noreply, Map.put(state, :rebooted, true)}
+ end
+
+ def handle_cast(:need_reboot, %{need_reboot: true} = state), do: {:noreply, state}
+
+ def handle_cast(:need_reboot, state) do
+ {:noreply, Map.put(state, :need_reboot, true)}
+ end