class AirbrakeClient
Constants
- PROJECT_ROOT_RGX
Public Class Methods
new(config)
click to toggle source
# File lib/integrations/airbrake_client.rb, line 13 def initialize(config) @key = config["api_key"] @project_id = config["project_id"] @environment = config["environment"] @errors = @key.nil? ? [] : errors() @deploys = @key.nil? ? [] : deploys() end
Private Instance Methods
deploys()
click to toggle source
# File lib/integrations/airbrake_client.rb, line 23 def deploys() fetch_deploys()["deploys"] .map do |deploy| { commit_id: deploy["version"].to_sym, environment: deploy["environment"], timestamp: DateTime.parse(deploy["createdAt"]) } end .sort_by { |deploy| deploy[:timestamp] } .select { |deploy| deploy[:environment] == @environment } end
errors()
click to toggle source
# File lib/integrations/airbrake_client.rb, line 36 def errors() cached_errors = load_from_cache() errors = fetch_groups(cached_errors)["groups"] .flat_map(&method(:select_traces)) .reject(&:nil?) .map do |trace| stack_trace = (trace["backtrace"] || []) .reject { |trace| trace["file"].nil? } .map do |trace| file = trace["file"].gsub(PROJECT_ROOT_RGX, "") line = trace["line"] function = trace["function"] { file: file, line: line, function: function } end { error_id: trace["id"].to_sym, first_time: DateTime.rfc3339(trace["createdAt"]), last_time: DateTime.rfc3339(trace["lastNoticeAt"]), link: "https://airbrake.io/projects/#{@project_id}/groups/#{trace["id"]}", environment: trace["context"]["environment"], type: trace["type"], message: trace["message"], total_occurrences: trace["noticeTotalCount"], stack_trace: stack_trace } end .concat(cached_errors) .select { |error| error[:environment] == @environment } .sort_by { |error| error[:last_time] } errors.each { |error| Store::Error::index(error) } Store::Error::cache() errors end
fetch_deploys(page=1)
click to toggle source
# File lib/integrations/airbrake_client.rb, line 120 def fetch_deploys(page=1) deploys = {"deploys" => [], "count" => 1} while deploys["deploys"].length < deploys["count"] do resp = JSON.parse(Net::HTTP.get( URI("https://airbrake.io/api/v4/projects/#{@project_id}/deploys?key=#{@key}&page=#{page}") )) deploys["count"] = resp["count"] deploys["deploys"].concat(resp["deploys"]) page += 1 end deploys end
fetch_error(group_id)
click to toggle source
# File lib/integrations/airbrake_client.rb, line 90 def fetch_error(group_id) JSON.parse(Net::HTTP.get( URI("https://airbrake.io/api/v4/projects/#{@project_id}/groups/#{group_id}/notices?key=#{@key}") )) end
fetch_groups(cached_errors, page=1)
click to toggle source
# File lib/integrations/airbrake_client.rb, line 96 def fetch_groups(cached_errors, page=1) errors = {"groups" => [], "count" => 1} while errors["groups"].length < errors["count"] do resp = JSON.parse(Net::HTTP.get( URI("https://airbrake.io/api/v4/projects/#{@project_id}/groups?key=#{@key}&page=#{page}") )) errors["count"] = resp["count"] while group = resp["groups"].shift() do if cached_errors.detect { |cached_item| cached_item[:error_id] == group["id"].to_sym } return errors else errors["groups"] << group end end page += 1 end errors rescue errors end
select_traces(group)
click to toggle source
# File lib/integrations/airbrake_client.rb, line 79 def select_traces(group) notices = fetch_error(group["id"])["notices"] error = notices.first["errors"].first group["backtrace"] = error["backtrace"] group["type"] = error["type"] group["message"] = error["message"] [group] rescue [] end