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!("""