#1110 fixed /api/pleroma/healthcheck
This commit is contained in:
		
							parent
							
								
									505613f6a7
								
							
						
					
					
						commit
						c2e2aadc42
					
				
					 2 changed files with 79 additions and 17 deletions
				
			
		| 
						 | 
				
			
			@ -8,7 +8,9 @@ defmodule Pleroma.Web.TwitterAPI.UtilController do
 | 
			
		|||
  require Logger
 | 
			
		||||
 | 
			
		||||
  alias Pleroma.Activity
 | 
			
		||||
  alias Pleroma.Config
 | 
			
		||||
  alias Pleroma.Emoji
 | 
			
		||||
  alias Pleroma.Healthcheck
 | 
			
		||||
  alias Pleroma.Notification
 | 
			
		||||
  alias Pleroma.Plugs.AuthenticationPlug
 | 
			
		||||
  alias Pleroma.User
 | 
			
		||||
| 
						 | 
				
			
			@ -23,7 +25,8 @@ def help_test(conn, _params) do
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def remote_subscribe(conn, %{"nickname" => nick, "profile" => _}) do
 | 
			
		||||
    with %User{} = user <- User.get_cached_by_nickname(nick), avatar = User.avatar_url(user) do
 | 
			
		||||
    with %User{} = user <- User.get_cached_by_nickname(nick),
 | 
			
		||||
         avatar = User.avatar_url(user) do
 | 
			
		||||
      conn
 | 
			
		||||
      |> render("subscribe.html", %{nickname: nick, avatar: avatar, error: false})
 | 
			
		||||
    else
 | 
			
		||||
| 
						 | 
				
			
			@ -338,20 +341,21 @@ def captcha(conn, _params) do
 | 
			
		|||
  end
 | 
			
		||||
 | 
			
		||||
  def healthcheck(conn, _params) do
 | 
			
		||||
    info =
 | 
			
		||||
      if Pleroma.Config.get([:instance, :healthcheck]) do
 | 
			
		||||
        Pleroma.Healthcheck.system_info()
 | 
			
		||||
      else
 | 
			
		||||
        %{}
 | 
			
		||||
      end
 | 
			
		||||
    with true <- Config.get([:instance, :healthcheck]),
 | 
			
		||||
         %{healthy: true} = info <- Healthcheck.system_info() do
 | 
			
		||||
      json(conn, info)
 | 
			
		||||
    else
 | 
			
		||||
      %{healthy: false} = info ->
 | 
			
		||||
        service_unavailable(conn, info)
 | 
			
		||||
 | 
			
		||||
    conn =
 | 
			
		||||
      if info[:healthy] do
 | 
			
		||||
        conn
 | 
			
		||||
      else
 | 
			
		||||
        Plug.Conn.put_status(conn, :service_unavailable)
 | 
			
		||||
      end
 | 
			
		||||
      _ ->
 | 
			
		||||
        service_unavailable(conn, %{})
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
    json(conn, info)
 | 
			
		||||
  defp service_unavailable(conn, info) do
 | 
			
		||||
    conn
 | 
			
		||||
    |> put_status(:service_unavailable)
 | 
			
		||||
    |> json(info)
 | 
			
		||||
  end
 | 
			
		||||
end
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,7 @@ defmodule Pleroma.Web.TwitterAPI.UtilControllerTest do
 | 
			
		|||
  alias Pleroma.User
 | 
			
		||||
  alias Pleroma.Web.CommonAPI
 | 
			
		||||
  import Pleroma.Factory
 | 
			
		||||
  import Mock
 | 
			
		||||
 | 
			
		||||
  setup do
 | 
			
		||||
    Tesla.Mock.mock(fn env -> apply(HttpRequestMock, :request, [env]) end)
 | 
			
		||||
| 
						 | 
				
			
			@ -231,10 +232,67 @@ test "show follow account page if the `acct` is a account link", %{conn: conn} d
 | 
			
		|||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  test "GET /api/pleroma/healthcheck", %{conn: conn} do
 | 
			
		||||
    conn = get(conn, "/api/pleroma/healthcheck")
 | 
			
		||||
  describe "GET /api/pleroma/healthcheck" do
 | 
			
		||||
    setup do
 | 
			
		||||
      config_healthcheck = Pleroma.Config.get([:instance, :healthcheck])
 | 
			
		||||
 | 
			
		||||
    assert conn.status in [200, 503]
 | 
			
		||||
      on_exit(fn ->
 | 
			
		||||
        Pleroma.Config.put([:instance, :healthcheck], config_healthcheck)
 | 
			
		||||
      end)
 | 
			
		||||
 | 
			
		||||
      :ok
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "returns 503 when healthcheck disabled", %{conn: conn} do
 | 
			
		||||
      Pleroma.Config.put([:instance, :healthcheck], false)
 | 
			
		||||
 | 
			
		||||
      response =
 | 
			
		||||
        conn
 | 
			
		||||
        |> get("/api/pleroma/healthcheck")
 | 
			
		||||
        |> json_response(503)
 | 
			
		||||
 | 
			
		||||
      assert response == %{}
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "returns 200 when healthcheck enabled and all ok", %{conn: conn} do
 | 
			
		||||
      Pleroma.Config.put([:instance, :healthcheck], true)
 | 
			
		||||
 | 
			
		||||
      with_mock Pleroma.Healthcheck,
 | 
			
		||||
        system_info: fn -> %Pleroma.Healthcheck{healthy: true} end do
 | 
			
		||||
        response =
 | 
			
		||||
          conn
 | 
			
		||||
          |> get("/api/pleroma/healthcheck")
 | 
			
		||||
          |> json_response(200)
 | 
			
		||||
 | 
			
		||||
        assert %{
 | 
			
		||||
                 "active" => _,
 | 
			
		||||
                 "healthy" => true,
 | 
			
		||||
                 "idle" => _,
 | 
			
		||||
                 "memory_used" => _,
 | 
			
		||||
                 "pool_size" => _
 | 
			
		||||
               } = response
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
 | 
			
		||||
    test "returns 503 when healthcheck enabled and  health is false", %{conn: conn} do
 | 
			
		||||
      Pleroma.Config.put([:instance, :healthcheck], true)
 | 
			
		||||
 | 
			
		||||
      with_mock Pleroma.Healthcheck,
 | 
			
		||||
        system_info: fn -> %Pleroma.Healthcheck{healthy: false} end do
 | 
			
		||||
        response =
 | 
			
		||||
          conn
 | 
			
		||||
          |> get("/api/pleroma/healthcheck")
 | 
			
		||||
          |> json_response(503)
 | 
			
		||||
 | 
			
		||||
        assert %{
 | 
			
		||||
                 "active" => _,
 | 
			
		||||
                 "healthy" => false,
 | 
			
		||||
                 "idle" => _,
 | 
			
		||||
                 "memory_used" => _,
 | 
			
		||||
                 "pool_size" => _
 | 
			
		||||
               } = response
 | 
			
		||||
      end
 | 
			
		||||
    end
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  describe "POST /api/pleroma/disable_account" do
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue