From 9ec94cd1fab31fcf7316d7ca98a94d5459a7a169 Mon Sep 17 00:00:00 2001 From: Zach Gollwitzer Date: Mon, 2 Dec 2024 12:04:54 -0500 Subject: [PATCH] Add context to plaid sync errors --- app/models/family.rb | 6 +++++- app/models/plaid_item.rb | 11 ++++++++++- app/models/sync.rb | 8 ++++++-- 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/app/models/family.rb b/app/models/family.rb index e32c0d787df..999e268a043 100644 --- a/app/models/family.rb +++ b/app/models/family.rb @@ -28,9 +28,13 @@ def sync_data(start_date: nil) account.sync_data(start_date: start_date) end + plaid_data = [] + plaid_items.each do |plaid_item| - plaid_item.sync_data(start_date: start_date) + plaid_data << plaid_item.sync_data(start_date: start_date) end + + plaid_data end def post_sync diff --git a/app/models/plaid_item.rb b/app/models/plaid_item.rb index 881cba17203..79087900c3c 100644 --- a/app/models/plaid_item.rb +++ b/app/models/plaid_item.rb @@ -35,11 +35,13 @@ def create_from_public_token(token, item_name:) def sync_data(start_date: nil) update!(last_synced_at: Time.current) - fetch_and_load_plaid_data + plaid_data = fetch_and_load_plaid_data accounts.each do |account| account.sync_data(start_date: start_date) end + + plaid_data end def post_sync @@ -53,10 +55,12 @@ def destroy_later private def fetch_and_load_plaid_data + data = {} item = plaid_provider.get_item(access_token).item update!(available_products: item.available_products, billed_products: item.billed_products) fetched_accounts = plaid_provider.get_item_accounts(self).accounts + data[:accounts] = fetched_accounts || [] internal_plaid_accounts = fetched_accounts.map do |account| internal_plaid_account = plaid_accounts.find_or_create_from_plaid_data!(account, family) @@ -65,6 +69,7 @@ def fetch_and_load_plaid_data end fetched_transactions = safe_fetch_plaid_data(:get_item_transactions) + data[:transactions] = fetched_transactions || [] if fetched_transactions transaction do @@ -81,6 +86,7 @@ def fetch_and_load_plaid_data end fetched_investments = safe_fetch_plaid_data(:get_item_investments) + data[:investments] = fetched_investments || [] if fetched_investments transaction do @@ -95,6 +101,7 @@ def fetch_and_load_plaid_data end fetched_liabilities = safe_fetch_plaid_data(:get_item_liabilities) + data[:liabilities] = fetched_liabilities || [] if fetched_liabilities transaction do @@ -109,6 +116,8 @@ def fetch_and_load_plaid_data end end end + + data end def safe_fetch_plaid_data(method) diff --git a/app/models/sync.rb b/app/models/sync.rb index e818b486f0d..6e09fb457ed 100644 --- a/app/models/sync.rb +++ b/app/models/sync.rb @@ -9,7 +9,8 @@ def perform start! begin - syncable.sync_data(start_date: start_date) + data = syncable.sync_data(start_date: start_date) + update!(data: data) if data complete! rescue StandardError => error fail! error @@ -29,7 +30,10 @@ def complete! end def fail!(error) - Sentry.capture_exception(error) + Sentry.capture_exception(error) do |scope| + scope.set_context("sync", { id: id }) + end + update! status: :failed, error: error.message, last_ran_at: Time.current end end