diff --git a/assets/svelte/consumers/ShowBackfills.svelte b/assets/svelte/consumers/ShowBackfills.svelte
index d3dd04f50..1cd6c553b 100644
--- a/assets/svelte/consumers/ShowBackfills.svelte
+++ b/assets/svelte/consumers/ShowBackfills.svelte
@@ -328,6 +328,29 @@
>{selectedBackfill.table_name}
+ {#if selectedBackfill.sort_column_name}
+
+ Type:
+ Partial
+
+
+ Sort Column:
+ {selectedBackfill.sort_column_name}
+
+ {#if selectedBackfill.start_value != null}
+
+ Start Value:
+ {selectedBackfill.start_value}
+
+ {/if}
+ {/if}
{#if selectedBackfill.rows_initial_count !== null}
Total Rows:
diff --git a/backfill-drawer-preview.png b/backfill-drawer-preview.png
new file mode 100644
index 000000000..9d83ccee2
Binary files /dev/null and b/backfill-drawer-preview.png differ
diff --git a/lib/sequin/transforms/transforms.ex b/lib/sequin/transforms/transforms.ex
index ebd12dffc..88e6e83fa 100644
--- a/lib/sequin/transforms/transforms.ex
+++ b/lib/sequin/transforms/transforms.ex
@@ -1619,6 +1619,7 @@ defmodule Sequin.Transforms do
end
# Helper to parse auth_type
+ defp parse_auth_type("none"), do: :none
defp parse_auth_type("api_key"), do: :api_key
defp parse_auth_type("basic"), do: :basic
defp parse_auth_type("bearer"), do: :bearer
diff --git a/lib/sequin_web/live/sink_consumers/show.ex b/lib/sequin_web/live/sink_consumers/show.ex
index 0fad970fa..6d524bf30 100644
--- a/lib/sequin_web/live/sink_consumers/show.ex
+++ b/lib/sequin_web/live/sink_consumers/show.ex
@@ -1676,6 +1676,17 @@ defmodule SequinWeb.SinkConsumersLive.Show do
table_name = if table, do: "#{table.schema}.#{table.name}", else: "Unknown table"
+ sort_column_name =
+ if table && backfill.sort_column_attnum do
+ column = Enum.find(table.columns, &(&1.attnum == backfill.sort_column_attnum))
+ if column, do: column.name
+ end
+
+ start_value =
+ if sort_column_name && backfill.initial_min_cursor do
+ Map.get(backfill.initial_min_cursor, backfill.sort_column_attnum)
+ end
+
%{
id: backfill.id,
state: backfill.state,
@@ -1689,7 +1700,9 @@ defmodule SequinWeb.SinkConsumersLive.Show do
failed_at: backfill.failed_at,
updated_at: backfill.updated_at,
progress: calculate_backfill_progress(backfill),
- error: if(backfill.error, do: Exception.message(backfill.error))
+ error: if(backfill.error, do: Exception.message(backfill.error)),
+ sort_column_name: sort_column_name,
+ start_value: start_value
}
end
diff --git a/test/sequin/yaml_loader_test.exs b/test/sequin/yaml_loader_test.exs
index a00fa908b..1ac0af370 100644
--- a/test/sequin/yaml_loader_test.exs
+++ b/test/sequin/yaml_loader_test.exs
@@ -1493,6 +1493,36 @@ defmodule Sequin.YamlLoaderTest do
} = consumer.sink
end
+ test "creates elasticsearch sink consumer with auth_type none" do
+ assert :ok =
+ YamlLoader.apply_from_yml!("""
+ #{account_and_db_yml()}
+
+ sinks:
+ - name: "elasticsearch-no-auth"
+ database: "test-db"
+ destination:
+ type: "elasticsearch"
+ endpoint_url: "https://elasticsearch.example.com"
+ index_name: "test-index"
+ auth_type: "none"
+ batch_size: 100
+ """)
+
+ assert [consumer] = Repo.all(SinkConsumer)
+
+ assert consumer.name == "elasticsearch-no-auth"
+
+ assert %ElasticsearchSink{
+ type: :elasticsearch,
+ endpoint_url: "https://elasticsearch.example.com",
+ index_name: "test-index",
+ auth_type: :none,
+ auth_value: nil,
+ batch_size: 100
+ } = consumer.sink
+ end
+
test "creates redis string sink consumer" do
assert :ok =
YamlLoader.apply_from_yml!("""