Class: FastlaneCore::AnalyticsIngesterClient
- Inherits:
-
Object
- Object
- FastlaneCore::AnalyticsIngesterClient
- Defined in:
- fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb
Instance Method Summary collapse
-
#initialize(ga_tracking) ⇒ AnalyticsIngesterClient
constructor
A new instance of AnalyticsIngesterClient.
- #post_event(event) ⇒ Object
- #post_request(event) ⇒ Object
- #send_request(event, retries: 2) ⇒ Object
Constructor Details
#initialize(ga_tracking) ⇒ AnalyticsIngesterClient
Returns a new instance of AnalyticsIngesterClient.
13 14 15 |
# File 'fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb', line 13 def initialize(ga_tracking) @ga_tracking = ga_tracking end |
Instance Method Details
#post_event(event) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb', line 17 def post_event(event) # If our users want to opt out of usage metrics, don't post the events. # Learn more at https://docs.fastlane.tools/#metrics if Helper.test? || FastlaneCore::Env.truthy?("FASTLANE_OPT_OUT_USAGE") return nil end return Thread.new do send_request(event) end end |
#post_request(event) ⇒ Object
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb', line 35 def post_request(event) connection = Faraday.new(GA_URL) do |conn| # This request runs while fastlane is shutting down, # so keep the timeouts short to not delay the user conn..open_timeout = 5 conn..timeout = 5 conn.adapter(Faraday.default_adapter) end connection.headers[:user_agent] = 'fastlane/' + Fastlane::VERSION # GA4 protocol, event parameters are sent as `ep.<name>` query parameters params = { v: "2", # Protocol version (GA4) tid: @ga_tracking, # GA4 measurement ID cid: event[:client_id], # Client ID sid: event[:session_id], # Session ID _ss: "1", # Session start seg: "1", # Session engaged # Engagement time in ms, required for events to count towards active users _et: (event[:engagement_time_msec] || 100).to_s, en: event[:name].to_s # Event name } (event[:params] || {}).each do |key, value| params["ep.#{key}"] = value.to_s end connection.post("/g/collect") do |request| request.params = params end end |
#send_request(event, retries: 2) ⇒ Object
28 29 30 31 32 33 |
# File 'fastlane_core/lib/fastlane_core/analytics/analytics_ingester_client.rb', line 28 def send_request(event, retries: 2) post_request(event) rescue retries -= 1 retry if retries >= 0 end |