From a42da92b1ff16c48eb40dc081d3b4fbd6480c7c0 Mon Sep 17 00:00:00 2001 From: Tom de Bruijn Date: Tue, 29 Aug 2023 15:06:48 +0200 Subject: [PATCH] Log error when sample data is invalid type (#992) Log an error when a value other than an Array or Hash is given to sample data to help debug why the sample data is not appearing. Related Slack conversation: https://appsignal.slack.com/archives/CNPP953E2/p1693295505307779 --- .../log-error-when-sample-data-is-invalid-format.md | 6 ++++++ lib/appsignal/transaction.rb | 9 ++++++++- spec/lib/appsignal/transaction_spec.rb | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) create mode 100644 .changesets/log-error-when-sample-data-is-invalid-format.md diff --git a/.changesets/log-error-when-sample-data-is-invalid-format.md b/.changesets/log-error-when-sample-data-is-invalid-format.md new file mode 100644 index 000000000..10229cb8a --- /dev/null +++ b/.changesets/log-error-when-sample-data-is-invalid-format.md @@ -0,0 +1,6 @@ +--- +bump: "patch" +type: "change" +--- + +Log an error when sample data is of an invalid type. Accepted types are Array and Hash. If any other types are given, it will log an error to the `appsignal.log` file. diff --git a/lib/appsignal/transaction.rb b/lib/appsignal/transaction.rb index 20854b4c3..27f73f315 100644 --- a/lib/appsignal/transaction.rb +++ b/lib/appsignal/transaction.rb @@ -320,7 +320,14 @@ def set_metadata(key, value) end def set_sample_data(key, data) - return unless key && data && (data.is_a?(Array) || data.is_a?(Hash)) + return unless key && data + + if !data.is_a?(Array) && !data.is_a?(Hash) + Appsignal.logger.error( + "Invalid sample data for '#{key}'. Value is not an Array or Hash: '#{data.inspect}'" + ) + return + end @ext.set_sample_data( key.to_s, diff --git a/spec/lib/appsignal/transaction_spec.rb b/spec/lib/appsignal/transaction_spec.rb index e34a5883d..5c1fef577 100644 --- a/spec/lib/appsignal/transaction_spec.rb +++ b/spec/lib/appsignal/transaction_spec.rb @@ -688,6 +688,8 @@ def current_transaction transaction.set_sample_data("params", "string") expect(transaction.to_h["sample_data"]).to eq({}) + expect(log_contents(log)).to contains_log :error, + %(Invalid sample data for 'params'. Value is not an Array or Hash: '"string"') end end