airbrake_tools 1.1.3 → 1.1.4

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bdd1c1131520b79c11f048ba998705943ab95bc2
4
- data.tar.gz: 29a5a90cc97973dbb2bed66ac01d66cd9a7a56f6
3
+ metadata.gz: fc3d7af0e6a7b6fc87ca968b446c774e970acd57
4
+ data.tar.gz: 69733ce8c83cc4a147ec7c3c9655e4a9cb00a737
5
5
  SHA512:
6
- metadata.gz: 15526a3a2541bbee47b30bb81235bc585eb80ccba968226c3c0d40cf44bf39e9cf51e6f023a81a0866490dc51a38b67f61431778e65d70b4a7bb634589d94973
7
- data.tar.gz: 2f0a069e6fcf7e78a934d2d630c13af0b53530bbfd78a36b95cb6aaa76f93189776a3f33b0005aa0badf1cbe995a4271f1f78263a869403027ced6a7cb960906
6
+ metadata.gz: c2988f6f938cee2117380a1f52c8307440899e8e4f389aefd3227719b9a85b0f2c00af4408ab86041bdfe8763b85e47d59bf358904b62291ff11d7003b30eca4
7
+ data.tar.gz: 9e899108980cdbff2044dd0d30d686f38ed8a5583a03ee85b7d131b4f7da4ffd5f89920dbfafb66bae036bde61ea04999b16ab04dc3985ba36eb38cbee1b9c24
data/Gemfile CHANGED
@@ -5,3 +5,4 @@ gem "bump", "0.3.8"
5
5
  gem "rake"
6
6
  gem "rspec", "~>2"
7
7
  gem "launchy"
8
+ gem "byebug"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- airbrake_tools (1.1.3)
4
+ airbrake_tools (1.1.4)
5
5
  airbrake-api (>= 4.5.1)
6
6
 
7
7
  GEM
@@ -14,12 +14,18 @@ GEM
14
14
  multi_xml
15
15
  parallel
16
16
  bump (0.3.8)
17
+ byebug (3.5.1)
18
+ columnize (~> 0.8)
19
+ debugger-linecache (~> 1.2)
20
+ slop (~> 3.6)
21
+ columnize (0.8.9)
22
+ debugger-linecache (1.2.0)
17
23
  diff-lcs (1.1.3)
18
24
  faraday (0.9.0)
19
25
  multipart-post (>= 1.2, < 3)
20
26
  faraday_middleware (0.9.1)
21
27
  faraday (>= 0.7.4, < 0.10)
22
- hashie (2.1.1)
28
+ hashie (3.3.1)
23
29
  launchy (2.4.2)
24
30
  addressable (~> 2.3)
25
31
  multi_xml (0.5.5)
@@ -34,6 +40,7 @@ GEM
34
40
  rspec-expectations (2.11.3)
35
41
  diff-lcs (~> 1.1.3)
36
42
  rspec-mocks (2.11.3)
43
+ slop (3.6.0)
37
44
 
38
45
  PLATFORMS
39
46
  ruby
@@ -41,6 +48,7 @@ PLATFORMS
41
48
  DEPENDENCIES
42
49
  airbrake_tools!
43
50
  bump (= 0.3.8)
51
+ byebug
44
52
  launchy
45
53
  rake
46
54
  rspec (~> 2)
data/Readme.md CHANGED
@@ -39,7 +39,7 @@ Shows all errors divided by pages
39
39
  - "fix all errors on page x"
40
40
 
41
41
  ```
42
- airbrake-tools your-account your-auth-token list | grep 'is suspended'
42
+ airbrake-tools your-account your-auth-token list --project 12345 | grep 'is suspended'
43
43
  Page 1 ----------
44
44
  54054554 -- ActiveRecord::RecordInvalid -- ActiveRecord::RecordInvalid: Validation failed: Requester is suspended.
45
45
  Page 2 ----------
@@ -1,7 +1,5 @@
1
- # encoding: UTF-8
2
1
  require "airbrake_tools/version"
3
2
  require "airbrake-api"
4
- require "launchy"
5
3
 
6
4
  module AirbrakeTools
7
5
  DEFAULT_HOT_PAGES = 1
@@ -51,13 +49,16 @@ module AirbrakeTools
51
49
  end
52
50
 
53
51
  def hot(options = {})
54
- errors = errors_with_notices({:pages => DEFAULT_HOT_PAGES}.merge(options))
55
- errors.sort_by{|e,n,f| f }.reverse
52
+ errors = Array(options[:project_id] || projects.map(&:id)).flat_map do |project_id|
53
+ errors_with_notices({pages: DEFAULT_HOT_PAGES, project_id: project_id}.merge(options))
54
+ end
55
+ errors.sort_by{|_,_,f| f }.reverse[0...AirbrakeAPI::Client::PER_PAGE]
56
56
  end
57
57
 
58
58
  def new(options = {})
59
+ need_project_id!(options)
59
60
  errors = errors_with_notices({:pages => DEFAULT_NEW_PAGES}.merge(options))
60
- errors.sort_by{|e,n,f| e.created_at }.reverse
61
+ errors.sort_by{|e,_,_| e.created_at }.reverse
61
62
  end
62
63
 
63
64
  def errors_with_notices(options)
@@ -65,9 +66,10 @@ module AirbrakeTools
65
66
  end
66
67
 
67
68
  def list(options)
68
- list_pages = options[:pages] ? options[:pages] : DEFAULT_LIST_PAGES
69
+ need_project_id!(options)
70
+ list_pages = (options[:pages] ? options[:pages] : DEFAULT_LIST_PAGES)
69
71
  page = 1
70
- while errors = AirbrakeAPI.errors(page: page) and page <= list_pages
72
+ while page <= list_pages && errors = AirbrakeAPI.errors(page: page, project_id: options.fetch(:project_id))
71
73
  select_env(errors, options).each do |error|
72
74
  puts "#{error.id} -- #{error.error_class} -- #{error.error_message} -- #{error.created_at}"
73
75
  end
@@ -92,20 +94,23 @@ module AirbrakeTools
92
94
  end
93
95
 
94
96
  def open(error_id, notice_id=nil)
97
+ require "launchy"
95
98
  error = AirbrakeAPI.error(error_id)
96
99
  raise URI::InvalidURIError if error.nil?
97
100
 
98
- if notice_id.nil?
99
- Launchy.open "https://#{AirbrakeAPI.account}.airbrake.io/projects/#{error.project_id}/groups/#{error_id}"
100
- else
101
- Launchy.open "https://#{AirbrakeAPI.account}.airbrake.io/projects/#{error.project_id}/groups/#{error_id}/notices/#{notice_id}"
102
- end
101
+ url = "https://#{AirbrakeAPI.account}.airbrake.io/projects/#{error.project_id}/groups/#{error_id}"
102
+ url += "/notices/#{notice_id}" if notice_id
103
+ Launchy.open url
103
104
  rescue URI::InvalidURIError
104
105
  puts "Error id does not map to any error on Airbrake"
105
106
  end
106
107
 
107
108
  private
108
109
 
110
+ def need_project_id!(options)
111
+ raise "Need a project_id" unless options[:project_id]
112
+ end
113
+
109
114
  def present_line(line)
110
115
  color = :gray if $stdout.tty? && !custom_file?(line)
111
116
  line = line.sub("[PROJECT_ROOT]/", "")
@@ -187,7 +192,7 @@ module AirbrakeTools
187
192
  end
188
193
 
189
194
  def print_errors(hot)
190
- hot.each_with_index do |(error, notices, rate, deviance), index|
195
+ hot.each_with_index do |(error, notices, rate), index|
191
196
  spark = sparkline(notices, :slots => 60, :interval => 60)
192
197
  puts "\n##{(index+1).to_s.ljust(2)} #{rate.round(2).to_s.rjust(6)}/hour total:#{error.notices_count.to_s.ljust(8)} #{color_text(spark.ljust(61), :green)}"
193
198
  puts hot_summary(error)
@@ -234,7 +239,7 @@ module AirbrakeTools
234
239
  opts.on("-c NUM", "--compare-depth NUM", Integer, "How deep to compare backtraces in summary (default: first line in project + #{DEFAULT_COMPARE_DEPTH_ADDITION})") {|s| options[:compare_depth] = s }
235
240
  opts.on("-p NUM", "--pages NUM", Integer, "How maybe pages to iterate over (default: hot:#{DEFAULT_HOT_PAGES} new:#{DEFAULT_NEW_PAGES} summary:#{DEFAULT_SUMMARY_PAGES})") {|s| options[:pages] = s }
236
241
  opts.on("-e ENV", "--environment ENV", String, "Only show errors from this environment (default: #{DEFAULT_ENVIRONMENT})") {|s| options[:env] = s }
237
- opts.on("--project NAME", String, "Name of project to fetch errors for") {|p| options[:project_name] = p }
242
+ opts.on("--project NAME_OR_ID", String, "Name of project to fetch errors for") {|p| options[:project_name] = p }
238
243
  opts.on("-h", "--help", "Show this.") { puts opts; exit }
239
244
  opts.on("-v", "--version", "Show Version"){ puts "airbrake-tools #{VERSION}"; exit }
240
245
  end.parse!(argv)
@@ -257,10 +262,14 @@ module AirbrakeTools
257
262
  `#{File.expand_path('../../spark.sh',__FILE__)} #{sparkline_data(notices, options).join(" ")}`.strip
258
263
  end
259
264
 
260
- def project_id(project_name)
265
+ def projects
261
266
  @projects ||= AirbrakeAPI.projects
262
- project = @projects.detect { |p| p.name == project_name }
263
- raise "project with name #{name} not found try #{@projects.map(&:name).join(", ")}" unless project
267
+ end
268
+
269
+ def project_id(project_name)
270
+ return project_name.to_i if project_name =~ /^\d+$/
271
+ project = projects.detect { |p| p.name == project_name }
272
+ raise "project with name #{project_name} not found try #{projects.map(&:name).join(", ")}" unless project
264
273
  project.id
265
274
  end
266
275
  end
@@ -1,3 +1,3 @@
1
1
  module AirbrakeTools
2
- VERSION = "1.1.3"
2
+ VERSION = "1.1.4"
3
3
  end
@@ -45,14 +45,14 @@ describe "airbrake-tools" do
45
45
 
46
46
  describe "hot" do
47
47
  it "kinda works" do
48
- output = airbrake_tools("#{config["subdomain"]} #{config["auth_token"]} hot")
48
+ output = airbrake_tools("#{config["subdomain"]} #{config["auth_token"]} hot --project #{config["project_id"]}")
49
49
  output.should =~ /#\d+\s+\d+\.\d+\/hour\s+total:\d+/
50
50
  end
51
51
  end
52
52
 
53
53
  describe "list" do
54
54
  it "kinda works" do
55
- output = airbrake_tools("#{config["subdomain"]} #{config["auth_token"]} list")
55
+ output = airbrake_tools("#{config["subdomain"]} #{config["auth_token"]} list --project #{config["project_id"]}")
56
56
  output.should include("Page 1 ")
57
57
  output.should =~ /^\d+/
58
58
  end
@@ -68,7 +68,7 @@ describe "airbrake-tools" do
68
68
 
69
69
  describe "new" do
70
70
  it "kinda works" do
71
- output = airbrake_tools("#{config["subdomain"]} #{config["auth_token"]} new")
71
+ output = airbrake_tools("#{config["subdomain"]} #{config["auth_token"]} new --project #{config["project_id"]}")
72
72
  output.should =~ /#\d+\s+\d+\.\d+\/hour\s+total:\d+/
73
73
  end
74
74
  end
@@ -1,3 +1,4 @@
1
1
  subdomain: xxx
2
2
  auth_token: yyy # NOT THE API KEY <-> got to airbrake, click on settings, copy auth_token
3
3
  summary_error_id: zzz # some valid error ID from airbrake to test summary functionality
4
+ project_id: aaa # some valid project ID from airbrake to test new/list functionality
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airbrake_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.3
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Cheatham
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-09-24 00:00:00.000000000 Z
11
+ date: 2014-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: airbrake-api