Adjusted to properly type each of the database interactions
This commit is contained in:
@@ -128,14 +128,18 @@ defmodule Mixer.Metrics.Buffer do
|
||||
|
||||
defp do_flush(events) do
|
||||
rows = Enum.reverse(events)
|
||||
count = length(rows)
|
||||
|
||||
try do
|
||||
{count, _} = Mixer.ClickhouseRepo.insert_all(PostEvent, rows)
|
||||
# ClickHouse async inserts acknowledge writes immediately and always
|
||||
# return num_rows: 0 — the data is queued for background commitment.
|
||||
# We use our own row count for the log so it is always accurate.
|
||||
Mixer.ClickhouseRepo.insert_all(PostEvent, rows)
|
||||
Logger.debug("[Mixer.Metrics.Buffer] Flushed #{count} event(s) to ClickHouse")
|
||||
rescue
|
||||
error ->
|
||||
Logger.error(
|
||||
"[Mixer.Metrics.Buffer] Failed to flush #{length(rows)} event(s) to ClickHouse: " <>
|
||||
"[Mixer.Metrics.Buffer] Failed to flush #{count} event(s) to ClickHouse: " <>
|
||||
Exception.message(error)
|
||||
)
|
||||
end
|
||||
|
||||
@@ -22,19 +22,23 @@ defmodule Mixer.Metrics.PostEvent do
|
||||
@primary_key false
|
||||
|
||||
schema "post_events" do
|
||||
# LowCardinality(String) in ClickHouse — keep values in the set above
|
||||
field :event_type, :string
|
||||
# Must be Ch-typed so ecto_ch emits LowCardinality(String) in the RowBinary
|
||||
# header, matching the ClickHouse table DDL exactly.
|
||||
field :event_type, Ch, type: "LowCardinality(String)"
|
||||
|
||||
# The tweet that the event relates to
|
||||
field :tweet_id, Ecto.UUID
|
||||
|
||||
# The acting user; may be nil for anonymous views
|
||||
field :user_id, Ecto.UUID
|
||||
# The acting user; may be nil for anonymous views.
|
||||
# Must be Ch-typed so ecto_ch emits Nullable(UUID) in the RowBinary header,
|
||||
# matching the ClickHouse table DDL exactly.
|
||||
field :user_id, Ch, type: "Nullable(UUID)"
|
||||
|
||||
# Wall-clock time of the event (UTC, second precision)
|
||||
field :occurred_at, :utc_datetime
|
||||
|
||||
# Optional originating IP, useful for deduplicating anonymous views
|
||||
field :ip_address, :string
|
||||
# Optional originating IP, useful for deduplicating anonymous views.
|
||||
# Nullable(String) for the same reason as user_id above.
|
||||
field :ip_address, Ch, type: "Nullable(String)"
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user