analytics/lib/plausible_web/controllers/debug_controller.ex
hq1 e3af1a317d
Onboarding improvements (#4459)
* Migration: add installation meta

* Update site schema with installation meta

* Remove VERIFICATION_ENABLED env var

* Add context API to create/remove special goals

* Add context api to update installation meta

* Remove verification enabled check

* Update new progress flow definitions

* Update generic components

* Remove internal /status API

* Implement installation live view

* Update traffic change notifier link

* Update verification, no more modal

* Update routes

* Remove focus.html - will unify everything under app layout

* Fix broken link

* Update templates with focus_box mostly

* Update controller tests

* Update controllers and stop using the focus layout

* copy changes

* Update verification.ex

* Remove dead template

* Update settings_general.html.heex

* Update copy in tests

* Update installation.ex

* Remove dangling dot

* Fix link

* Update installation.ex

* Update installation.ex

* Better tooltips?

* Simpler labels

* Revert "Simpler labels"

This reverts commit 797560ef82f2067458b03b884be5aecc8fdc72bc.

* Add copy to clipboard link and fix snippet's dark mode

* Offer installation detection skip only if ws connected

* Put COPY link at the bottom with background

* Make tooltips link to docs

* Fix cherry-pick gone wrong

* Hide tooltips on mobile screens

* WIP: 404 tracking wizard

* Revert "WIP: 404 tracking wizard"

This reverts commit a9c9c79bbd.

* Update lib/plausible_web/live/components/verification.ex

Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>

* Update lib/plausible_web/live/installation.ex

Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>

* Use current_user from socket.assigns

* Update lib/plausible_web/live/installation.ex

Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>

* Use current_user from socket.assigns

* Use conn.private to steer verification tests

* Drop non-sticky tooltip in favour of component parametrization

Co-authored-by: Artur Pata <artur.pata@gmail.com>

* Reapply "WIP: 404 tracking wizard"

This reverts commit 3ba81671d7.

* Fix installation tests including 404 tracking

* Fixup the tooltip component

* Format

* Update installation.ex

* Put flash whenever installation option changes

* Use last known installation type on domain change

* Extract user flow definition to provide compile-time checks

* See if this helps running CE migrations successfully

* Use `styled_link` on registration/login views

* Don't crash when there's no conn.private carried over

* Format

* Push "Determining installation type" message a bit lower

* Use links and footer lists uniformly

This commit introduces a `<.focus_list/>` component
for rendering focus box footer links with colored
discs. It also equips generic link components
with the ability of sending non-GET requests
along with CSRF token, so we can apply uniform
styling and stop using legacy Phoenix link tags.

cc @zoldar @apata

* ws 👾

* Render more descriptive flashes on script config change

---------

Co-authored-by: Marko Saric <34340819+metmarkosaric@users.noreply.github.com>
Co-authored-by: Adrian Gruntkowski <adrian.gruntkowski@gmail.com>
Co-authored-by: Artur Pata <artur.pata@gmail.com>
2024-09-02 12:49:54 +02:00

74 lines
2.3 KiB
Elixir

defmodule PlausibleWeb.DebugController do
use PlausibleWeb, :controller
use Plausible.IngestRepo
use Plausible
import Ecto.Query
plug(PlausibleWeb.RequireAccountPlug)
plug(PlausibleWeb.SuperAdminOnlyPlug)
def clickhouse(conn, params) do
cluster? = Plausible.IngestRepo.clustered_table?("events_v2")
on_cluster = if(cluster?, do: "ON CLUSTER '{cluster}'", else: "")
# Ensure last logs are flushed
IngestRepo.query("SYSTEM FLUSH LOGS #{on_cluster}")
queries =
from(
l in from_query_log(cluster?),
select: %{
query: fragment("formatQuery(?)", l.query),
log_comment: l.log_comment,
type: l.type,
event_time: l.event_time,
query_duration_ms: l.query_duration_ms,
query_id: l.query_id,
memory_usage: fragment("formatReadableSize(?)", l.memory_usage),
read_bytes: fragment("formatReadableSize(?)", l.read_bytes),
result_bytes: fragment("formatReadableSize(?)", l.result_bytes),
result_rows: l.result_rows
},
where: l.type > 1 and fragment("event_time > now() - toIntervalMinute(15)"),
order_by: [desc: l.event_time]
)
|> filter_by_params(conn, params)
|> IngestRepo.all()
|> Enum.map(fn data ->
Jason.decode!(data.log_comment)
|> Map.merge(data)
|> Map.delete(:log_comment)
end)
conn
|> render("clickhouse.html",
queries: queries
)
end
defp from_query_log(cluster?) do
case cluster? do
true -> from(l in fragment("clusterAllReplicas('{cluster}', system.query_log)"))
false -> from(l in fragment("system.query_log"))
end
end
defp filter_by_params(q, _conn, %{"user_id" => user_id}),
do: where(q, [l], fragment("JSONExtractInt(?, \'user_id\') = ?", l.log_comment, ^user_id))
defp filter_by_params(q, _conn, %{"site_id" => site_id}),
do: where(q, [l], fragment("JSONExtractInt(?, \'site_id\') = ?", l.log_comment, ^site_id))
defp filter_by_params(q, _conn, %{"site_domain" => site_domain}),
do:
where(
q,
[l],
fragment("JSONExtractInt(?, \'site_domain\') = ?", l.log_comment, ^site_domain)
)
defp filter_by_params(q, conn, _),
do: filter_by_params(q, conn, %{"user_id" => conn.assigns.current_user.id})
end