bugsnag-api 1.0.2 → 2.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.buildkite/pipeline.yml +6 -0
- data/.github/ISSUE_TEMPLATE/A.md +14 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +47 -0
- data/.github/ISSUE_TEMPLATE/feature_request.md +24 -0
- data/.github/PULL_REQUEST_TEMPLATE.md +16 -0
- data/.github/support.md +19 -0
- data/.github/workflows/tests.yml +53 -0
- data/.rubocop.yml +2 -0
- data/.rubocop_todo.yml +271 -0
- data/CHANGELOG.md +59 -0
- data/CONTRIBUTING.md +40 -0
- data/Gemfile +9 -0
- data/README.md +178 -109
- data/bugsnag-api.gemspec +42 -6
- data/config/.gitignore +1 -0
- data/docker-compose.yml +9 -0
- data/dockerfiles/Dockerfile.audit +5 -0
- data/lib/bugsnag/api/client.rb +32 -10
- data/lib/bugsnag/api/client/collaborators.rb +86 -0
- data/lib/bugsnag/api/client/comments.rb +31 -40
- data/lib/bugsnag/api/client/currentuser.rb +32 -0
- data/lib/bugsnag/api/client/errors.rb +48 -53
- data/lib/bugsnag/api/client/eventfields.rb +49 -0
- data/lib/bugsnag/api/client/events.rb +37 -32
- data/lib/bugsnag/api/client/organizations.rb +45 -0
- data/lib/bugsnag/api/client/pivots.rb +42 -0
- data/lib/bugsnag/api/client/projects.rb +36 -63
- data/lib/bugsnag/api/client/trends.rb +41 -0
- data/lib/bugsnag/api/configuration.rb +1 -1
- data/lib/bugsnag/api/error.rb +5 -1
- data/lib/bugsnag/api/response/raise_error.rb +0 -2
- data/lib/bugsnag/api/version.rb +1 -1
- data/scripts/license_finder.sh +4 -0
- data/spec/bugsnag/api/client/collaborators_spec.rb +101 -0
- data/spec/bugsnag/api/client/comments_spec.rb +42 -30
- data/spec/bugsnag/api/client/currentuser_spec.rb +57 -0
- data/spec/bugsnag/api/client/errors_spec.rb +44 -41
- data/spec/bugsnag/api/client/eventfields_spec.rb +56 -0
- data/spec/bugsnag/api/client/events_spec.rb +41 -29
- data/spec/bugsnag/api/client/organizations_spec.rb +53 -0
- data/spec/bugsnag/api/client/pivots_spec.rb +49 -0
- data/spec/bugsnag/api/client/projects_spec.rb +35 -59
- data/spec/bugsnag/api/client/trends_spec.rb +44 -0
- data/spec/bugsnag/api/client_spec.rb +76 -9
- data/spec/bugsnag/api_spec.rb +2 -0
- data/spec/cassettes/Bugsnag_Api_Client/_get/handles_query_params.yml +36 -26
- data/spec/cassettes/Bugsnag_Api_Client/_last_response/caches_the_last_agent_response.yml +36 -26
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/creates_and_returns_a_collaborator.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/_invitecollaborator/invites_multiple_collaborators.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborator/returns_a_collaborator.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_organization_collaborators.yml +135 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/returns_a_list_of_all_project_collaborators.yml +135 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_collaborators/throws_an_argument_error_if_neither_org_id_or_project_id_are_provided.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_delete_collaborator/deletes_a_collaborator.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_update_collaborator_permissions/updates_and_returns_the_collaborator.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Collaborators/given_a_collaborator_exists/_view_collaborator_projects/returns_a_list_of_projects_belonging_to_the_collaborator.yml +153 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/_create_comment/creates_a_comment_on_the_error.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comment/retrieves_the_comment_specified.yml +135 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_comments/retrieves_all_comments_on_an_error.yml +137 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_delete_comment/deletes_the_comment_and_returns_true.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Comments/given_a_comment_has_been_created/_update_comment/updates_the_message_on_a_comment.yml +135 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_auth_token/returns_the_organization_the_auth_token_belongs_to.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_organizations/when_using_user_credentials/returns_users_organizations.yml +71 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_auth_token/lists_current_user_s_projects_in_the_organization.yml +88 -0
- data/spec/cassettes/Bugsnag_Api_Client_CurrentUser/_list_projects/when_using_user_credentials/lists_current_user_s_projects_in_the_organization.yml +91 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_error/returns_a_single_error.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_errors/returns_errors_on_the_project.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_update_errors/updates_and_returns_the_updated_errors.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_error_events/lists_all_error_events.yml +73 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_event/returns_the_specified_event.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_events/returns_the_a_list_of_project_errors.yml +73 -0
- data/spec/cassettes/Bugsnag_Api_Client_Events/_latest_event/returns_the_last_event_on_an_error.yml +70 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/_create_organization/creates_a_new_organization.yml +71 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_delete_organization/deletes_the_organization.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_organization/returns_the_requested_organization.yml +139 -0
- data/spec/cassettes/Bugsnag_Api_Client_Organizations/with_organization/_update_organization/updates_and_returns_the_organization.yml +139 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_create_project/creates_a_new_project.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_delete_project/deletes_the_project.yml +127 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_project/returns_the_requested_project.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_regenerate_api_key/removes_the_current_api_key_and_replaces_it_with_a_new_api_key.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Projects/given_a_project/_update_project/updates_and_returns_the_project.yml +133 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_error_trends_in_bucket_form.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_buckets/returns_a_list_of_project_trends_in_bucket_form.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_project_trends_in_resolution_form.yml +68 -0
- data/spec/cassettes/Bugsnag_Api_Client_Trends/_trends_resolution/returns_a_list_of_trends_in_resolution_form.yml +68 -0
- data/spec/spec_helper.rb +32 -30
- metadata +167 -115
- data/.travis.yml +0 -9
- data/lib/bugsnag/api/client/accounts.rb +0 -44
- data/lib/bugsnag/api/client/users.rb +0 -99
- data/spec/bugsnag/api/client/accounts_spec.rb +0 -45
- data/spec/bugsnag/api/client/users_spec.rb +0 -105
- data/spec/cassettes/Bugsnag_Api_Client_Accounts/_account/returns_the_requested_account.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Accounts/_account/when_using_account_credentials/returns_the_account.yml +0 -51
- data/spec/cassettes/Bugsnag_Api_Client_Accounts/_accounts/returns_all_accounts.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Comments/_comments/returns_all_comments_on_an_error.yml +0 -107
- data/spec/cassettes/Bugsnag_Api_Client_Comments/_create_comment/created_a_comment.yml +0 -51
- data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_comment/returns_a_comment.yml +0 -97
- data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_delete_comment/deletes_an_existing_comment.yml +0 -92
- data/spec/cassettes/Bugsnag_Api_Client_Comments/with_comment/_update_comment/updates_an_existing_comment.yml +0 -97
- data/spec/cassettes/Bugsnag_Api_Client_Errors/_errors/returns_all_errors_on_an_project.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_error/returns_an_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_reopen_error/reopens_the_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_resolve_error/resolves_the_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Errors/with_error/_update_error/updates_the_error.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Events/_error_events/returns_all_events_on_an_error.yml +0 -64
- data/spec/cassettes/Bugsnag_Api_Client_Events/_project_events/returns_all_events_on_a_project.yml +0 -64
- data/spec/cassettes/Bugsnag_Api_Client_Events/with_event/_event/returns_an_event.yml +0 -56
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_account_projects/returns_all_projects_on_an_account.yml +0 -61
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_account_projects/when_using_account_credentials/returns_all_projects.yml +0 -63
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_create_project/creates_a_project_on_an_account.yml +0 -50
- data/spec/cassettes/Bugsnag_Api_Client_Projects/_user_projects/returns_all_projects_for_a_user.yml +0 -61
- data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_delete_project/deletes_an_existing_project.yml +0 -91
- data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_project/returns_a_project.yml +0 -95
- data/spec/cassettes/Bugsnag_Api_Client_Projects/with_project/_update_project/updates_an_existing_project.yml +0 -95
- data/spec/cassettes/Bugsnag_Api_Client_Users/_account_users/returns_all_users_on_an_account.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Users/_account_users/when_using_account_credentials/returns_all_users.yml +0 -51
- data/spec/cassettes/Bugsnag_Api_Client_Users/_invite_user/invites_a_user_to_an_account.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Users/_project_users/returns_all_users_for_a_project.yml +0 -49
- data/spec/cassettes/Bugsnag_Api_Client_Users/_user/returns_a_user.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Users/_user/when_using_user_credentials/returns_the_authed_user.yml +0 -48
- data/spec/cassettes/Bugsnag_Api_Client_Users/with_user/_remove_user/removes_a_user_from_an_account.yml +0 -89
- data/spec/cassettes/Bugsnag_Api_Client_Users/with_user/_update_user_permissions/updates_a_users_permissions.yml +0 -93
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,65 @@
|
|
1
1
|
Changelog
|
2
2
|
=========
|
3
3
|
|
4
|
+
## 2.0.3 (11 May 2021)
|
5
|
+
|
6
|
+
### Fixes
|
7
|
+
|
8
|
+
* Fix error handling middleware compatibility with Faraday v1.2.0 and above
|
9
|
+
| [askreet](https://github.com/askreet)
|
10
|
+
| [#30](https://github.com/bugsnag/bugsnag-api-ruby/pull/30)
|
11
|
+
|
12
|
+
* Remove call to deprecated `URI.escape`
|
13
|
+
| [askreet](https://github.com/askreet)
|
14
|
+
| [#28](https://github.com/bugsnag/bugsnag-api-ruby/pull/28)
|
15
|
+
|
16
|
+
## 2.0.2 (21 Feb 2018)
|
17
|
+
|
18
|
+
### Fixes
|
19
|
+
|
20
|
+
* Fixes issue with custom query parameters being overridden
|
21
|
+
| [#13](https://github.com/bugsnag/bugsnag-api-ruby/pull/13)
|
22
|
+
|
23
|
+
## 2.0.1 (15 Nov 2017)
|
24
|
+
|
25
|
+
### Fixes
|
26
|
+
|
27
|
+
* Adds `X-Bugsnag-Api` header so that on-prem clients may use this tool
|
28
|
+
| [tremlab](https://github.com/tremlab)
|
29
|
+
| [#14](https://github.com/bugsnag/bugsnag-api-ruby/pull/14)
|
30
|
+
|
31
|
+
## 2.0.0 (10 Oct 2017)
|
32
|
+
|
33
|
+
This release changes the gem to access v2 of the [Bugsnag data-access API](https://docs.bugsnag.com/api/data-access/), with full API documentation found [here](http://docs.bugsnagapiv2.apiary.io/).
|
34
|
+
|
35
|
+
### Enhancements
|
36
|
+
|
37
|
+
* Uses Bugsnag data-access API v2 endpoints with associated changes to endpoints and methods, namely:
|
38
|
+
- Removes:
|
39
|
+
* accounts
|
40
|
+
* users
|
41
|
+
- Adds:
|
42
|
+
* organizations
|
43
|
+
* collaborators
|
44
|
+
* event fields
|
45
|
+
* pivots
|
46
|
+
* trends
|
47
|
+
- Updates:
|
48
|
+
* comments
|
49
|
+
* errors
|
50
|
+
* events
|
51
|
+
* projects
|
52
|
+
|
53
|
+
| [#11](https://github.com/bugsnag/bugsnag-api-ruby/pull/11)
|
54
|
+
|
55
|
+
* Adds error response to hitting rate limit
|
56
|
+
| [#10](https://github.com/bugsnag/bugsnag-api-ruby/pull/10)
|
57
|
+
|
58
|
+
### Known Issues
|
59
|
+
|
60
|
+
* per_page option not respected in paginated API calls
|
61
|
+
* issues with event_fields not being created correctly
|
62
|
+
|
4
63
|
1.0.2
|
5
64
|
-----
|
6
65
|
- Fix load-order bug when requiring from certain environments
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# How to contribute
|
2
|
+
|
3
|
+
1. [Fork](https://help.github.com/articles/fork-a-repo) the [library on GitHub](https://github.com/bugsnag/bugsnag-api-ruby)
|
4
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
5
|
+
3. Commit and push until you are happy with your contribution
|
6
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
7
|
+
5. Run the tests and make sure they all pass:
|
8
|
+
|
9
|
+
```
|
10
|
+
rake spec
|
11
|
+
```
|
12
|
+
|
13
|
+
6. Create a [Pull Request](https://help.github.com/articles/using-pull-requests)
|
14
|
+
|
15
|
+
Thank you!
|
16
|
+
|
17
|
+
## How to release
|
18
|
+
|
19
|
+
If you're a member of the core team, follow these instructions for releasing bugsnag-api-ruby.
|
20
|
+
|
21
|
+
### First time setup
|
22
|
+
|
23
|
+
* Create a Rubygems account
|
24
|
+
* Get a member of the platforms team to add you as contributor on bugsnag-ruby in Rubygems
|
25
|
+
|
26
|
+
### Every time
|
27
|
+
|
28
|
+
* Update `CHANGELOG.md`
|
29
|
+
* Update the version number in [`lib/bugsnag/api/version.rb`](./lib/bugsnag/api/version.rb)
|
30
|
+
* Update `README.md` if necessary with changes to the interface or configuration
|
31
|
+
* Commit/push your changes
|
32
|
+
* Release to rubygems
|
33
|
+
|
34
|
+
```
|
35
|
+
gem build bugsnag-api.gemspec
|
36
|
+
gem push bugsnag-api-[version].gem
|
37
|
+
```
|
38
|
+
* Create a new GitHub release, copying the changes from the change log
|
39
|
+
|
40
|
+
|
data/Gemfile
CHANGED
@@ -1,4 +1,13 @@
|
|
1
1
|
source 'https://rubygems.org'
|
2
2
|
|
3
|
+
# Any :development dependencies are ignored for license auditing purposes
|
4
|
+
group :development do
|
5
|
+
end
|
6
|
+
|
7
|
+
# Any :test dependencies are ignored for license auditing purposes
|
8
|
+
group :test do
|
9
|
+
end
|
10
|
+
|
3
11
|
# Specify your gem's dependencies in bugsnag-api.gemspec
|
4
12
|
gemspec
|
13
|
+
|
data/README.md
CHANGED
@@ -1,9 +1,12 @@
|
|
1
1
|
Bugsnag API Toolkit for Ruby
|
2
2
|
============================
|
3
|
+

|
4
|
+
|
5
|
+
The library allows for quick read/write access to the [Bugsnag Data Access API](https://docs.bugsnag.com/api/data-access/) from your Ruby applications. You can use this library to build your own applications which leverage data found in your Bugsnag dashboard.
|
3
6
|
|
4
|
-
|
7
|
+
Version 2.x (current) of this gem corresponds to v2 of the Data Access API, while [1.x](https://github.com/bugsnag/bugsnag-api-ruby/tree/v1.0.3) uses the (deprecated) v1 of the Data Access API.
|
5
8
|
|
6
|
-
If you are looking to automatically detect crashes in your Ruby apps, you should take a look at the [Bugsnag Ruby Detection Library](https://bugsnag.com/
|
9
|
+
If you are looking to automatically detect crashes in your Ruby apps, you should take a look at the [Bugsnag Ruby Detection Library](https://docs.bugsnag.com/platforms/ruby) instead.
|
7
10
|
|
8
11
|
This library borrows heavily from the code and philosophies of the fantastic [Octokit](https://github.com/octokit/octokit.rb) library. A big thanks to [@pengwynn](https://github.com/pengwynn) and the rest of the Octokit team!
|
9
12
|
|
@@ -17,14 +20,18 @@ This library borrows heavily from the code and philosophies of the fantastic [Oc
|
|
17
20
|
- [Accessing Related Resources](#accessing-related-resources)
|
18
21
|
- [Authentication](#authentication)
|
19
22
|
- [Pagination](#pagination)
|
23
|
+
- [Filtering](#filtering)
|
20
24
|
- [Accessing HTTP responses](#accessing-http-responses)
|
21
25
|
- [API Methods](#api-methods)
|
22
|
-
- [
|
26
|
+
- [Organizations](#organizations)
|
27
|
+
- [Collaborators](#collaborators)
|
23
28
|
- [Comments](#comments)
|
24
29
|
- [Errors](#errors)
|
25
30
|
- [Events](#events)
|
31
|
+
- [Event Fields](#event-fields)
|
32
|
+
- [Pivots](#pivots)
|
26
33
|
- [Projects](#projects)
|
27
|
-
- [
|
34
|
+
- [Trends](#trends)
|
28
35
|
- [Advanced Configuration](#advanced-configuration)
|
29
36
|
|
30
37
|
|
@@ -51,6 +58,12 @@ $ gem install bugsnag-api
|
|
51
58
|
|
52
59
|
## Usage
|
53
60
|
|
61
|
+
### Require gem
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
require 'bugsnag/api'
|
65
|
+
```
|
66
|
+
|
54
67
|
### Making Requests
|
55
68
|
|
56
69
|
API methods are available as module methods or as client instance methods.
|
@@ -58,42 +71,44 @@ API methods are available as module methods or as client instance methods.
|
|
58
71
|
```ruby
|
59
72
|
# Provide authentication credentials
|
60
73
|
Bugsnag::Api.configure do |config|
|
61
|
-
config.auth_token = "your-
|
74
|
+
config.auth_token = "your-personal-auth-token"
|
62
75
|
end
|
63
76
|
|
64
|
-
#
|
65
|
-
|
77
|
+
# Access API methods
|
78
|
+
organizations = Bugsnag::Api.organizations
|
66
79
|
```
|
67
80
|
|
68
81
|
or...
|
69
82
|
|
70
83
|
```ruby
|
71
84
|
# Create an non-static API client
|
72
|
-
client = Bugsnag::Api::Client.new(auth_token: "your-
|
85
|
+
client = Bugsnag::Api::Client.new(auth_token: "your-personal-auth-token")
|
73
86
|
|
74
87
|
# Access API methods on the client
|
75
|
-
|
88
|
+
organizations = client.organizations
|
76
89
|
```
|
77
90
|
|
78
91
|
### Consuming Resources
|
79
92
|
|
80
|
-
Most methods return a `Resource`
|
93
|
+
Most methods return a [`Resource`](http://www.rubydoc.info/gems/sawyer/Sawyer/Resource)
|
94
|
+
object which provides dot notation and [] access for fields returned in the API
|
95
|
+
response.
|
81
96
|
|
82
97
|
```ruby
|
83
|
-
# Fetch
|
84
|
-
|
98
|
+
# Fetch an organization
|
99
|
+
org = Bugsnag::Api.organization("organization-id")
|
85
100
|
|
86
|
-
puts
|
101
|
+
puts org.name
|
87
102
|
# => "Acme Co"
|
88
103
|
|
89
|
-
puts
|
90
|
-
# => #<Set: {:id, :name, :
|
104
|
+
puts org.fields
|
105
|
+
# => #<Set: {:id, :name, :slug, :creator, :created_at, :updated_at, :auto_upgrade, :upgrade_url, :billing_emails}>
|
91
106
|
|
92
|
-
puts
|
107
|
+
puts org.id
|
93
108
|
# => "50baed0d9bf39c1431000003"
|
94
109
|
|
95
|
-
account.rels[:
|
96
|
-
# => "https://api.bugsnag.com/
|
110
|
+
account.rels[:upgrade].href
|
111
|
+
# => "https://api.bugsnag.com/organizations/50baed0d9bf39c1431000003/..."
|
97
112
|
```
|
98
113
|
|
99
114
|
### Accessing Related Resources
|
@@ -101,15 +116,15 @@ account.rels[:users].href
|
|
101
116
|
Resources returned by Bugsnag API methods contain not only data but hypermedia link relations:
|
102
117
|
|
103
118
|
```ruby
|
104
|
-
|
119
|
+
project = Bugsnag::Api.projects("organization-id")
|
105
120
|
|
106
121
|
# Get the users rel, returned from the API as users_url in the resource
|
107
|
-
|
108
|
-
# => "https://api.bugsnag.com/
|
122
|
+
project.rels[:errors].href
|
123
|
+
# => "https://api.bugsnag.com/projects/50baed0d9bf39c1431000003/errors"
|
109
124
|
|
110
|
-
|
111
|
-
|
112
|
-
# => "
|
125
|
+
errors = project.rels[:errors].get.data
|
126
|
+
errors.first.message
|
127
|
+
# => "Can't find method: getStrng()"
|
113
128
|
```
|
114
129
|
|
115
130
|
When processing API responses, all `*_url` attributes are culled in to the link relations collection. Any `url` attribute becomes `.rels[:self]`.
|
@@ -118,16 +133,17 @@ When processing API responses, all `*_url` attributes are culled in to the link
|
|
118
133
|
### Authentication
|
119
134
|
|
120
135
|
API usage requires authentication. You can authenticate using either your
|
121
|
-
Bugsnag account's [auth token](https://bugsnag.com/
|
122
|
-
or with your Bugsnag
|
136
|
+
Bugsnag account's [auth token](https://app.bugsnag.com/settings/my-account/)
|
137
|
+
or with your Bugsnag user credentials.
|
123
138
|
|
124
139
|
```ruby
|
125
140
|
# Authenticate with your Bugsnag account's auth token
|
126
141
|
Bugsnag::Api.configure do |config|
|
127
|
-
config.auth_token = "your-
|
142
|
+
config.auth_token = "your-personal-auth-token"
|
128
143
|
end
|
129
144
|
|
130
|
-
# Authenticate using your Bugsnag email address and password
|
145
|
+
# Authenticate using your Bugsnag email address and password. Unavailable when
|
146
|
+
# using multi-factor authentication.
|
131
147
|
Bugsnag::Api.configure do |config|
|
132
148
|
config.email = "example@example.com"
|
133
149
|
config.password = "password"
|
@@ -140,46 +156,102 @@ Many Bugsnag API resources are paginated. While you may be tempted to start addi
|
|
140
156
|
|
141
157
|
```ruby
|
142
158
|
errors = Bugsnag::Api.errors("project-id", per_page: 100)
|
143
|
-
|
159
|
+
last_response = Bugsnag::Api.last_response
|
160
|
+
until last_response.rels[:next].nil?
|
161
|
+
last_response = last_response.rels[:next].get
|
162
|
+
errors.concat last_response.data
|
163
|
+
end
|
144
164
|
```
|
145
165
|
|
166
|
+
### Filtering
|
167
|
+
|
168
|
+
Events and Errors can be filtered to return a subset of data. Any of the filters usable in the Bugsnag dashoard can be used in this API. The filter object is a hash of Event Field keys containing an array of filter values. Each filter value has a `type` and a `value` to filter on. The type determines the type of comparison that will be performed.
|
169
|
+
|
170
|
+
| `type` | Description | Multiple value combination logic |
|
171
|
+
|-|-|-|
|
172
|
+
| `eq` | Filter for items that 'match' the value. Some fields require an exact match and some support substring matching. | OR |
|
173
|
+
| `ne` | Filter for items that don't match the value. | AND |
|
174
|
+
|
175
|
+
:warning: Note that the Event Field `search` can not be used more than once in a call.
|
176
|
+
|
177
|
+
You can see the filterable fields for a project using the following snippet, after setting the `project-id` value.
|
178
|
+
|
179
|
+
```ruby
|
180
|
+
fields = Bugsnag::Api.event_fields("project-id")
|
181
|
+
|
182
|
+
puts "List of the searchable fields for this project:"
|
183
|
+
fields.each_with_index do |field,idx|
|
184
|
+
puts " [#{idx}] #{field.display_id}"
|
185
|
+
end
|
186
|
+
# => List of the searchable fields for this project:
|
187
|
+
# => [0] event
|
188
|
+
# => [1] error
|
189
|
+
# => [2] search
|
190
|
+
# => [3] user.id
|
191
|
+
# => ...
|
192
|
+
```
|
146
193
|
|
147
194
|
### Accessing HTTP responses
|
148
195
|
|
149
196
|
While most methods return a `Resource` object or a `Boolean`, sometimes you may need access to the raw HTTP response headers. You can access the last HTTP response with `Client#last_response`:
|
150
197
|
|
151
198
|
```ruby
|
152
|
-
|
153
|
-
response
|
154
|
-
status
|
199
|
+
organization = Bugsnag::Api.organizations.first
|
200
|
+
response = Bugsnag::Api.last_response
|
201
|
+
status = response.headers[:status]
|
155
202
|
```
|
156
203
|
|
157
204
|
## API Methods
|
158
205
|
|
159
|
-
|
206
|
+
The following methods are available via `Bugsnag::Api` and the Client interface.
|
207
|
+
For more information, consult the [API
|
208
|
+
documentation](http://www.rubydoc.info/gems/bugsnag-api/Bugsnag/Api/Client)
|
209
|
+
|
210
|
+
### Organizations
|
160
211
|
|
161
212
|
```ruby
|
162
|
-
# List your
|
163
|
-
|
213
|
+
# List your organizations
|
214
|
+
orgs = Bugsnag::Api.organizations
|
164
215
|
|
165
|
-
# Get a single
|
166
|
-
|
216
|
+
# Get a single organization
|
217
|
+
org = Bugsnag::Api.organization("organization-id")
|
218
|
+
```
|
167
219
|
|
168
|
-
|
169
|
-
|
220
|
+
### Collaborators
|
221
|
+
|
222
|
+
```ruby
|
223
|
+
# List organization collaborators
|
224
|
+
users = Bugsnag::Api.collaborators("organization-id")
|
225
|
+
|
226
|
+
# List project collaborators
|
227
|
+
users = Bugsnag::Api.collaborators(nil, "project-id")
|
228
|
+
|
229
|
+
# Invite a user to an account
|
230
|
+
user = Bugsnag::Api.invite_collaborators("org-id", "example@example.com", {
|
231
|
+
admin: true
|
232
|
+
})
|
233
|
+
|
234
|
+
# Update a user's account permissions
|
235
|
+
user = Bugsnag::Api.update_collaborator_permissions("org-id", "user-id", {
|
236
|
+
admin: false
|
237
|
+
})
|
238
|
+
|
239
|
+
# Remove a user from an account
|
240
|
+
Bugsnag::Api.delete_collaborator("org-id", "user-id")
|
170
241
|
```
|
171
242
|
|
243
|
+
|
172
244
|
### Comments
|
173
245
|
|
174
246
|
```ruby
|
175
247
|
# List error comments
|
176
|
-
comments = Bugsnag::Api.comments("error-id")
|
248
|
+
comments = Bugsnag::Api.comments("project-id", "error-id")
|
177
249
|
|
178
250
|
# Get a single comment
|
179
|
-
comment = Bugsnag::Api.comment("comment-id")
|
251
|
+
comment = Bugsnag::Api.comment("project-id", "comment-id")
|
180
252
|
|
181
253
|
# Create a comment
|
182
|
-
comment = Bugsnag::Api.create_comment("error-id", "comment message")
|
254
|
+
comment = Bugsnag::Api.create_comment("project-id", "error-id", "comment message")
|
183
255
|
|
184
256
|
# Update a comment
|
185
257
|
comment = Bugsnag::Api.update_comment("comment-id", "new comment message")
|
@@ -192,24 +264,26 @@ Bugsnag::Api.delete_comment("comment-id")
|
|
192
264
|
|
193
265
|
```ruby
|
194
266
|
# List project errors
|
195
|
-
errors = Bugsnag::Api.errors("project-id")
|
267
|
+
errors = Bugsnag::Api.errors("project-id", nil)
|
268
|
+
|
269
|
+
# List errors with a filter (see Filtering section for more information)
|
270
|
+
# Returns errors that match `EXC_BAD_INSTRUCTION`, this could be from the error class, message, context, or stack trace.
|
271
|
+
errors = Bugsnag::Api.errors("project-id", nil, direction:"desc", filters: {
|
272
|
+
"search": [{ "type":"eq", "value":"EXC_BAD_INSTRUCTION" }]
|
273
|
+
})
|
196
274
|
|
197
275
|
# Get a single error
|
198
|
-
error = Bugsnag::Api.error("error-id")
|
276
|
+
error = Bugsnag::Api.error("project-id", "error-id")
|
199
277
|
|
200
|
-
#
|
201
|
-
error = Bugsnag::Api.
|
278
|
+
# Update a single error
|
279
|
+
error = Bugsnag::Api.update_errors("project-id", "error-id")
|
202
280
|
|
203
|
-
#
|
204
|
-
error = Bugsnag::Api.
|
205
|
-
|
206
|
-
# Update an error
|
207
|
-
error = Bugsnag::Api.update_error("error-id", {
|
208
|
-
resolved: true
|
209
|
-
})
|
281
|
+
# Update bulk errors
|
282
|
+
error = Bugsnag::Api.update_errors("project-id",
|
283
|
+
["error-id1", "error-id2"])
|
210
284
|
|
211
285
|
# Delete an error
|
212
|
-
error = Bugsnag::Api.delete_error("error-id")
|
286
|
+
error = Bugsnag::Api.delete_error("project-id", "error-id")
|
213
287
|
```
|
214
288
|
|
215
289
|
### Events
|
@@ -219,78 +293,87 @@ error = Bugsnag::Api.delete_error("error-id")
|
|
219
293
|
events = Bugsnag::Api.events("project-id")
|
220
294
|
|
221
295
|
# List error events
|
222
|
-
events = Bugsnag::Api.error_events("error-id")
|
296
|
+
events = Bugsnag::Api.error_events("project-id", "error-id")
|
297
|
+
|
298
|
+
# List events with a filter (see Filtering section for more information)
|
299
|
+
# Returns events with
|
300
|
+
# class `EXC_BAD_INSTRUCTION` OR `EXC_BAD_ACCESS`
|
301
|
+
# AND where the device is jailbroken
|
302
|
+
events = Bugsnag::Api.events(PROJECT_ID, direction:"desc", filters: {
|
303
|
+
"event.class": [{ "type":"eq", "value":"EXC_BAD_INSTRUCTION" }, { "type":"eq", "value":"EXC_BAD_ACCESS" }],
|
304
|
+
"device.jailbroken": [{ "type":"eq", "value":"false"}]
|
305
|
+
})
|
306
|
+
|
307
|
+
# Get the latest event
|
308
|
+
event = Bugsnag::Api.latest_event("project-id", "error-id")
|
223
309
|
|
224
310
|
# Get a single event
|
225
|
-
event = Bugsnag::Api.event("event-id")
|
311
|
+
event = Bugsnag::Api.event("project-id", "event-id")
|
226
312
|
|
227
313
|
# Delete an event
|
228
|
-
Bugsnag::Api.delete_event("event-id")
|
314
|
+
Bugsnag::Api.delete_event("project-id", "event-id")
|
229
315
|
```
|
230
316
|
|
231
|
-
###
|
317
|
+
### Event Fields
|
232
318
|
|
233
319
|
```ruby
|
234
|
-
#
|
235
|
-
|
320
|
+
# list a project's event fields
|
321
|
+
Bugsnag::Api.event_fields("project-id")
|
236
322
|
|
237
|
-
#
|
238
|
-
|
323
|
+
# create an event field
|
324
|
+
Bugsnag::Api.create_event_field("project-id", "display id", "path.to.field", {})
|
239
325
|
|
240
|
-
#
|
241
|
-
|
326
|
+
# update an event field
|
327
|
+
Bugsnag::Api.update_event_field("project-id", "display id", "new.path.to.field")
|
328
|
+
|
329
|
+
# delete an event field
|
330
|
+
Bugsnag::Api.delete_event_field("project-id", "display id")
|
331
|
+
```
|
332
|
+
|
333
|
+
### Projects
|
334
|
+
|
335
|
+
```ruby
|
336
|
+
# List organization projects
|
337
|
+
projects = Bugsnag::Api.projects("organization-id")
|
242
338
|
|
243
339
|
# Get a single project
|
244
340
|
project = Bugsnag::Api.project("project-id")
|
245
341
|
|
246
342
|
# Create a project
|
247
|
-
project = Bugsnag::Api.create_project("
|
248
|
-
name: "Name",
|
249
|
-
type: "rails"
|
250
|
-
})
|
343
|
+
project = Bugsnag::Api.create_project("organization-id", "project name", "rails")
|
251
344
|
|
252
345
|
# Update a project
|
253
346
|
project = Bugsnag::Api.update_project("project-id", {
|
254
347
|
name: "New Name"
|
255
348
|
})
|
256
349
|
|
350
|
+
# Regenerate a project API key
|
351
|
+
Bugsnag::Api.regenerate_api_key("project-id")
|
352
|
+
|
257
353
|
# Delete a project
|
258
354
|
Bugsnag::Api.delete_project("project-id")
|
259
355
|
```
|
260
356
|
|
261
|
-
###
|
357
|
+
### Pivots
|
262
358
|
|
263
359
|
```ruby
|
264
|
-
#
|
265
|
-
|
266
|
-
|
267
|
-
# List authenticated account's users (requires account auth)
|
268
|
-
users = Bugsnag::Api.users
|
360
|
+
# list a project's pivots
|
361
|
+
Bugsnag::Api.pivots("project-id")
|
269
362
|
|
270
|
-
#
|
271
|
-
|
272
|
-
|
273
|
-
# Get a single user
|
274
|
-
user = Bugsnag::Api.user("user-id")
|
275
|
-
|
276
|
-
# Get authenticated user (requires user auth)
|
277
|
-
user = Bugsnag::Api.user
|
363
|
+
# list pivot values
|
364
|
+
Bugsnag::Api.pivot_values("project-id", "display id")
|
365
|
+
```
|
278
366
|
|
279
|
-
|
280
|
-
user = Bugsnag::Api.invite_user("account-id", "example@example.com", {
|
281
|
-
admin: true
|
282
|
-
})
|
367
|
+
### Trends
|
283
368
|
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
})
|
369
|
+
```ruby
|
370
|
+
# list an error's trends in 5 buckets
|
371
|
+
Bugsnag::Api.trends_buckets("project-id", 5, "error-id")
|
288
372
|
|
289
|
-
#
|
290
|
-
Bugsnag::Api.
|
373
|
+
# list a project's trends by resolution
|
374
|
+
Bugsnag::Api.trends_resolution("project-id", "2h")
|
291
375
|
```
|
292
376
|
|
293
|
-
|
294
377
|
## Advanced Configuration
|
295
378
|
|
296
379
|
### Endpoint
|
@@ -299,7 +382,7 @@ By default, `https://api.bugsnag.com` is used for API access, if you are using
|
|
299
382
|
Bugsnag Enterprise, you can configure a custom endpoint.
|
300
383
|
|
301
384
|
```ruby
|
302
|
-
Bugsnag
|
385
|
+
Bugsnag::Api.configure do |config|
|
303
386
|
config.endpoint = "http://api.bugsnag.example.com"
|
304
387
|
end
|
305
388
|
```
|
@@ -309,7 +392,7 @@ end
|
|
309
392
|
If you are using a proxy, you can configure the API client to use it.
|
310
393
|
|
311
394
|
```ruby
|
312
|
-
Bugsnag
|
395
|
+
Bugsnag::Api.configure do |config|
|
313
396
|
config.proxy = {
|
314
397
|
uri: "http://proxy.example.com",
|
315
398
|
user: "foo",
|
@@ -319,20 +402,6 @@ end
|
|
319
402
|
```
|
320
403
|
|
321
404
|
|
322
|
-
## Build Status
|
323
|
-
|
324
|
-

|
325
|
-
|
326
|
-
|
327
|
-
## Contributing
|
328
|
-
|
329
|
-
1. Fork it
|
330
|
-
2. Create your feature branch (`git checkout -b my-new-feature`)
|
331
|
-
3. Commit your changes (`git commit -am 'Add some feature'`)
|
332
|
-
4. Push to the branch (`git push origin my-new-feature`)
|
333
|
-
5. Create new Pull Request
|
334
|
-
|
335
|
-
|
336
405
|
## License
|
337
406
|
|
338
407
|
The Bugsnag API Toolkit for Ruby is free software released under the MIT License. See [LICENSE.txt](LICENSE.txt) for details.
|