mirror of
https://github.com/plausible/analytics.git
synced 2024-12-25 10:33:01 +03:00
e3af1a317d
* 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 commita9c9c79bbd
. * 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 commit3ba81671d7
. * 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>
74 lines
2.3 KiB
Elixir
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
|