Skip to content

Commit f8e6274

Browse files
committed
feat: support for nested fields and query functions
- Nested fields like "Owner.Id" will be now populated correctly - Functions like SOQL "toLabel(field) field" will now be populated correctly - Removed field type validations as they are not working with nested fields - Update changelog
1 parent 0fb69f4 commit f8e6274

File tree

3 files changed

+22
-15
lines changed

3 files changed

+22
-15
lines changed

CHANGELOG.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,10 @@
1+
## 3.3.0
2+
- feat: Added `timeout` configuration to control RESTForce timeout settings (defaults to `60`)
3+
- feat: Added support for reference fields (`parent__r.child`)
4+
- feat: Added support for built-in SOQL functions (etc. `toLabel(field__c) field`)
5+
- refactor: Removed field_type inferring (elastic can infer it / logstash mapping can be configured for special cases)
6+
- fix: update Apache licence to suppress compiling warning
7+
18
## 3.2.0
29
- Added `use_tooling_api` configuration to connect to the Salesforce Tooling API instead of the regular Rest API. [#26](https://github.com/logstash-plugins/logstash-input-salesforce/pull/26)
310

lib/logstash/inputs/salesforce.rb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@ class LogStash::Inputs::Salesforce < LogStash::Inputs::Base
6666
# By default, this uses the default Restforce API version.
6767
# To override this, set this to something like "32.0" for example
6868
config :api_version, :validate => :string, :required => false
69+
# RESTForce request timeout in seconds.
70+
config :timeout, :validate => :number, :required => false
6971
# Consumer Key for authentication. You must set up a new SFDC
7072
# connected app with oath to use this output. More information
7173
# can be found here:
@@ -92,8 +94,6 @@ class LogStash::Inputs::Salesforce < LogStash::Inputs::Base
9294
# SOQL statement. Additional fields can be filtered on by
9395
# adding field1 = value1 AND field2 = value2 AND...
9496
config :sfdc_filters, :validate => :string, :default => ""
95-
# RESTForce request timeout in seconds.
96-
config :timeout, :validate => :number, :default => 60, :required => false
9797
# Setting this to true will convert SFDC's NamedFields__c to named_fields__c
9898
config :to_underscores, :validate => :boolean, :default => false
9999

@@ -108,22 +108,22 @@ def register
108108
public
109109
def run(queue)
110110
results = client.query(get_query())
111+
@logger.debug("Query results:", :results => results)
111112
if results && results.first
112113
results.each do |result|
113114
event = LogStash::Event.new()
114115
decorate(event)
115116
@sfdc_fields.each do |field|
116-
field_type = @sfdc_field_types[field]
117+
# PARENT.CHILD => PARENT
118+
# function(field) field => field
119+
field = field.split(/\./).first.split(/\s/).last
117120
value = result.send(field)
121+
122+
# Remove RESTForce's nested 'attributes' field for reference fields
123+
value.is_a?(Hash) ? value = value.tap { |hash| hash.delete(:attributes)} : value
124+
118125
event_key = @to_underscores ? underscore(field) : field
119-
if not value.nil?
120-
case field_type
121-
when 'datetime', 'date'
122-
event.set(event_key, format_time(value))
123-
else
124-
event.set(event_key, value)
125-
end
126-
end
126+
event.set(event_key, value)
127127
end
128128
queue << event
129129
end
@@ -146,8 +146,7 @@ def client_options
146146
:password => @password,
147147
:security_token => @security_token,
148148
:client_id => @client_id,
149-
:client_secret => @client_secret,
150-
:timeout => @timeout
149+
:client_secret => @client_secret
151150
}
152151
# configure the endpoint to which restforce connects to for authentication
153152
if @sfdc_instance_url && @use_test_sandbox
@@ -158,6 +157,7 @@ def client_options
158157
options.merge!({ :host => "test.salesforce.com" })
159158
end
160159
options.merge!({ :api_version => @api_version }) if @api_version
160+
options.merge!({ :timeout => @timeout }) if @timeout
161161
return options
162162
end
163163

logstash-input-salesforce.gemspec

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
Gem::Specification.new do |s|
22
s.name = 'logstash-input-salesforce'
3-
s.version = '3.2.0'
3+
s.version = '3.3.0'
44
s.licenses = ['Apache-2.0']
55
s.summary = "Creates events based on a Salesforce SOQL query"
66
s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
2020
# Gem dependencies
2121
s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
2222
s.add_runtime_dependency "logstash-codec-plain"
23-
s.add_runtime_dependency "restforce", ">= 5", "< 5.2"
23+
s.add_runtime_dependency "restforce", ">= 5", "< 5.3"
2424
s.add_development_dependency 'logstash-devutils'
2525
s.add_development_dependency 'vcr'
2626
s.add_development_dependency 'webmock'

0 commit comments

Comments
 (0)