class Coverband::Collectors::ViewTrackerService

This class extends view tracker to support web service reporting

Public Class Methods

supported_version?() click to toggle source
# File lib/coverband/collectors/view_tracker_service.rb, line 26
def self.supported_version?
  defined?(Rails) && defined?(Rails::VERSION) && Rails::VERSION::STRING.split(".").first.to_i >= 4
end

Public Instance Methods

report_views_tracked() click to toggle source
# File lib/coverband/collectors/view_tracker_service.rb, line 9
def report_views_tracked
  reported_time = Time.now.to_i
  if views_to_record.any?
    relative_views = views_to_record.map! do |view|
      roots.each do |root|
        view = view.gsub(/#{root}/, "")
      end
      view
    end
    save_tracked_views(views: relative_views, reported_time: reported_time)
  end
  self.views_to_record = []
rescue => e
  # we don't want to raise errors if Coverband can't reach the service
  logger&.error "Coverband: view_tracker failed to store, error #{e.class.name}" if Coverband.configuration.verbose || Coverband.configuration.service_dev_mode
end

Private Instance Methods

logger() click to toggle source
# File lib/coverband/collectors/view_tracker_service.rb, line 32
def logger
  Coverband.configuration.logger
end
save_tracked_views(views:, reported_time:) click to toggle source
# File lib/coverband/collectors/view_tracker_service.rb, line 36
def save_tracked_views(views:, reported_time:)
  uri = URI("#{Coverband.configuration.service_url}/api/collector")
  req = Net::HTTP::Post.new(uri, "Content-Type" => "application/json", "Coverband-Token" => Coverband.configuration.api_key)
  data = {
    collection_type: "view_tracker_delta",
    collection_data: {
      tags: {
        runtime_env: Coverband.configuration.coverband_env
      },
      collection_time: reported_time,
      tracked_views: views
    }
  }
  # puts "sending #{data}"
  req.body = {remote_uuid: SecureRandom.uuid, data: data}.to_json
  Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == "https") do |http|
    http.request(req)
  end
rescue => e
  logger&.error "Coverband: Error while saving coverage #{e}" if Coverband.configuration.verbose || Coverband.configuration.service_dev_mode
end