Skip to content

Commit

Permalink
Return warning when imported stats are skipped in Stats API due to un…
Browse files Browse the repository at this point in the history
…supported query
  • Loading branch information
zoldar committed May 21, 2024
1 parent 7876802 commit a1dc6b4
Showing 1 changed file with 21 additions and 3 deletions.
24 changes: 21 additions & 3 deletions lib/plausible_web/controllers/api/external_stats_controller.ex
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,9 @@ defmodule PlausibleWeb.Api.ExternalStatsController do
Plausible.Stats.aggregate(site, query, metrics)
end

json(conn, %{results: results})
payload = maybe_add_warning(%{results: results}, query)

json(conn, payload)
else
err_tuple -> send_json_error_response(conn, err_tuple)
end
Expand All @@ -60,8 +62,9 @@ defmodule PlausibleWeb.Api.ExternalStatsController do
:ok <- ensure_custom_props_access(site, query) do
page = String.to_integer(Map.get(params, "page", "1"))
results = Plausible.Stats.breakdown(site, query, metrics, {limit, page})
payload = maybe_add_warning(%{results: results}, query)

json(conn, %{results: results})
json(conn, payload)
else
err_tuple -> send_json_error_response(conn, err_tuple)
end
Expand Down Expand Up @@ -264,8 +267,9 @@ defmodule PlausibleWeb.Api.ExternalStatsController do
{:ok, metrics} <- parse_and_validate_metrics(params, query),
:ok <- ensure_custom_props_access(site, query) do
graph = Plausible.Stats.timeseries(site, query, metrics)
payload = maybe_add_warning(%{results: graph}, query)

json(conn, %{results: graph})
json(conn, payload)
else
err_tuple -> send_json_error_response(conn, err_tuple)
end
Expand Down Expand Up @@ -375,6 +379,20 @@ defmodule PlausibleWeb.Api.ExternalStatsController do
"The goal `#{goal}` is not configured for this site. "
end

defp maybe_add_warning(payload, %{skip_imported_reason: reason})
when reason in [nil, :no_imported_data, :out_of_range] do
payload
end

defp maybe_add_warning(payload, %{skip_imported_reason: :unsupported_query}) do
Map.put(
payload,
:warning,
"Imported stats are not included in the results because query parameters are not supported. " <>
"For more information, see: https://plausible.io/docs/stats-api#filtering-imported-stats"
)
end

defp send_json_error_response(conn, {:error, {status, msg}}) do
conn
|> put_status(status)
Expand Down

0 comments on commit a1dc6b4

Please sign in to comment.